SQL使用左连接结合GROUP BY求和问题(实现Excel SUMIF等效效果)
问题原因
- 分组字段错误:当前按
PoReportTable.COST分组,相当于每个不同的成本值单独分为一组,自然不会对同一个NR对应的多个成本做汇总,和按NR维度聚合的需求完全不符。 - 缺少聚合函数:要实现SUMIF的求和效果,需要对
PoReportTable.COST加SUM()聚合函数,否则不会做累加计算。 - 选择了不必要的未聚合字段:SELECT语句中包含了
PoReportTable.Short_Text、未聚合的PoReportTable.COST,这些字段既没有出现在GROUP BY子句中,也没有加聚合函数,SQLite宽松语法下不会报错,但会导致返回非预期的明细行,无法得到聚合结果。
修正后的代码
conn = sqlite3.connect("data_superstore.db") query3=''' SELECT Lockedlist.NR, Lockedlist.Programme, SUM(PoReportTable.COST) AS COST FROM Lockedlist LEFT JOIN PoReportTable ON Lockedlist.NR= PoReportTable.Tracking_Field GROUP BY Lockedlist.NR, Lockedlist.Programme ORDER BY COST DESC; '''
如果需要把没有对应成本的NR的成本值显示为0而不是NULL,可以把求和部分改成SUM(IFNULL(PoReportTable.COST, 0)) AS COST即可。
内容的提问来源于stack exchange,提问作者Cantilever
相关产品推荐
相关产品推荐

