SQL - 检查唯一列对的条件

时间:2018-02-21 22:00:20

标签: mysql sql

需要帮助编写一个查询,以便将2012年(tiv_2012)的总投资值总计为满足以下条件的所有保单持有人的小数点后两位: 1.与一个或多个其他保单持有人具有相同的tiv_2011价值。 2.与其他保单持有人不在同一个城市,即(lat,lon)对mut是唯一的。

这是我的查询,但它不适用于第2部分。(不在同一个纬度,lon):

SELECT ROUND( SUM(tiv_2012), 2)
FROM insurance
WHERE pid IN (SELECT i1.pid
              FROM insurance i1, insurance i2 
              WHERE (i1.tiv_2011 = i2.tiv_2011 AND i1.pid != i2.pid)
              AND ((i1.lat != i2.lat) AND (i1.lon != i2.lon))
             )

会感激一些建议。谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用existsnot exists

SELECT ROUND( SUM(tiv_2012), 2)
FROM insurance i
WHERE EXISTS (SELECT 1
              FROM insurance insurance i2 
              WHERE i2.tiv_2011 = i1.tiv_2011 AND i2.pid <> i.pid
             ) AND
      NOT EXISTS (SELECT 1
                  FROM insurance insurance i2 
                  WHERE i2.lat = i.lat AND i2.lon = i.lon AND i2.pid <> i.pid
                 ) 

答案 1 :(得分:0)

似乎是一个存在:

cv::Mat ccm = (srcFloat.t() * srcFloat).inv()* srcFloat.t() * trgFloat;