You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:15:04