首页 > 解决方案 > 查询以在一列中按相同值求和,并按另一列中的唯一值过滤

问题描述

遇到如下SQL查询问题:

Id, Val1, Val2, Lat,  Lon
1,  10.1, 20.3, 30.5, 120.3
2,  12.4, 15.7, 25.3, 110.7
3,  10.1, 24.5, 27.8, 115.0
4,  10.1, 18.9, 25.3, 110.7

获取与 Val1 匹配但具有唯一 Lat、Lon 且与任何其他行不匹配的行的总和(Val2)。此示例中的结果将是 20.3(row1) + 24.5(row 3) = 44.8。第 4 行被忽略,因为它的纬度、经度与第 2 行匹配。

在这种情况下返回总和的查询是什么?

标签: sqlsql-server

解决方案


此查询应为您提供所需的结果。只要没有匹配并且找到另一个值的值,SUM它就适用Val2于每个:Val1LatLonId

SELECT Val1, COALESCE(SUM(Val2), 0) AS "Sum"
FROM data d
WHERE NOT EXISTS(SELECT *
                 FROM data d1
                 WHERE d1.Id != d.Id AND d1.Lat = d.Lat AND d1.Lon = d.Lon)
GROUP BY Val1

输出

Val1    Sum
10.1    44.8

dbfiddle 上的演示


推荐阅读