PostgreSQL如何按自定义规则对列值条件求和并分组去重
SQL查询实现方案
直接通过CASE WHEN做条件聚合即可,该写法兼容MySQL、PostgreSQL、SQL Server、Hive等绝大多数主流SQL引擎,替换语句中的表名为实际业务表名就能运行:
SELECT Name, SUM( CASE WHEN Val_Num = 1 THEN 1 ELSE 0.5 END ) AS Val_Num FROM 替换为你的实际表名 GROUP BY Name;
逻辑校验
对照样例数据的计算结果完全匹配预期:
- Joey共2条记录:1条值为1累加1,1条值为2累加0.5,最终结果1.5
- Chandler共1条记录:值为2累加0.5,最终结果0.5
- Monica共2条记录:值分别为3、2,各累加0.5,最终结果1
如果使用MySQL,也可以用内置IF函数写更简洁的版本,逻辑和通用写法完全一致:
SELECT Name, SUM(IF(Val_Num = 1, 1, 0.5)) AS Val_Num FROM 替换为你的实际表名 GROUP BY Name;
内容的提问来源于stack exchange,提问作者temur_p
相关产品推荐
相关产品推荐

