SQL去除重复行 查询每个playerid对应唯一总支付金额
问题原因
SUM() OVER (PARTITION BY playerid)属于窗口函数,窗口函数不会合并原始行,只会在每一条原始记录上追加对应分区的聚合计算结果,所以同一个playerid下有多少条单笔支付记录,最终结果就会返回多少行,才会出现你看到的重复汇总值问题。
正确写法
你要的是每个playerid仅返回1条汇总记录,直接用普通聚合搭配GROUP BY分组即可,不需要使用窗口函数:
SELECT playerid, SUM(payment_amount) AS total_payments FROM DEPOSIT$ GROUP BY playerid
执行结果
运行后返回的结果完全匹配你的需求,无重复行:
| playerid | total_payments |
|---|---|
| 1002 | 60 |
| 1003 | 50 |
| 1004 | 30 |
| 1006 | 100 |
| 1008 | 60 |
补充:窗口函数的适用场景是需要同时保留单笔明细行、又要在每行附带维度聚合值的时候使用;如果只需要维度级别的汇总结果,
GROUP BY聚合是性能更好、逻辑更直接的方案。
内容的提问来源于stack exchange,提问作者Haley H.
相关产品推荐
相关产品推荐

