MySQL如何将UNION ALL的汇总结果转换为逐行累加的新列
MySQL实现明细行旁显示累计汇总值的方案
你需要实现的是滚动累计求和逻辑,根据你使用的MySQL版本可以选择以下两种实现方式:
方法1:MySQL 8.0及以上版本(窗口函数实现,推荐)
直接使用SUM()聚合窗口函数即可实现,窗口内的ORDER BY用于指定累计的排序规则,可替换为你业务需要的排序字段(如设备ID、分类字段等):
SELECT quantity * costs AS `Total`, SUM(quantity * costs) OVER (ORDER BY equipment_id ASC) AS `Total of Totals` FROM equipment;
如果你需要按设备分类单独做累计,只需要在窗口函数中添加PARTITION BY 分类字段即可,示例:
SELECT category AS 设备分类, quantity * costs AS `Total`, SUM(quantity * costs) OVER (PARTITION BY category ORDER BY equipment_id ASC) AS `分类内累计金额` FROM equipment;
方法2:MySQL 5.x及更低版本(用户变量实现)
老版本MySQL不支持窗口函数,可以通过自定义变量逐行累加实现:
SELECT total AS `Total`, @running_sum := @running_sum + total AS `Total of Totals` FROM -- 先计算每行的总金额,同时确定排序规则 (SELECT quantity * costs AS total FROM equipment ORDER BY equipment_id ASC) AS t, -- 初始化累计变量为0 (SELECT @running_sum := 0) AS init;
内容的提问来源于stack exchange,提问作者Mark Bonello
相关产品推荐
相关产品推荐

