MySQL按月分组统计订单总数量返回行数而非累计值如何解决
问题原因
你当前使用的COUNT(o.qty)函数仅统计分组内非空的qty字段的行数,不会对字段值进行累加计算。2018年1月对应2条订单记录,COUNT统计后返回2,和预期的求和结果不符。
修正后的查询语句
要得到订单数量的总和,将COUNT替换为SUM函数即可,同时可以搭配IFNULL处理左关联可能产生的空值问题:
SELECT YEAR(p.date), MONTH(p.date), SUM(IFNULL(o.qty, 0)) FROM products p LEFT JOIN orders o USING (oid) GROUP BY YEAR(p.date), MONTH(p.date)
如果你的业务逻辑可以保证所有products表的记录都存在对应orders表的关联记录,也可以简化为直接使用SUM(o.qty)。
执行效果
修正后分组会对每个月的所有qty值累加,2018年1月的计算结果为1+4=5,和预期输出完全一致。
内容的提问来源于stack exchange,提问作者user3052443
相关产品推荐
相关产品推荐

