在MySQL中创建累积和列

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

我有张表,看起来像这样:

id   count
1    100
2    50
3    10

我想添加一个名为“累积”的新列_SUM,所以表看起来是这样的:

id   count  cumulative_sum
1    100    100
2    50     150
3    10     160

是否有一个MySQL更新语句可以很容易地做到这一点?实现这一目标的最佳方法是什么?

提问于
用户回答回答于

如果性能有问题,可以使用MySQL变量:

set @csum := 0;
update YourTable
set cumulative_sum = (@csum := @csum + count)
order by id;

或者,可以删除cumulative_sum列并在每个查询上计算它:

set @csum := 0;
select id, count, (@csum := @csum + count) as cumulative_sum
from YourTable
order by id;

它以一种运行方式计算运行的和:)

用户回答回答于

使用相关查询:


  SELECT t.id,
         t.count,
         (SELECT SUM(x.count)
            FROM TABLE x
           WHERE x.id <= t.id) AS cumulative_sum
    FROM TABLE t
ORDER BY t.id

使用MySQL变量:


  SELECT t.id,
         t.count,
         @running_total := @running_total + t.count AS cumulative_sum
    FROM TABLE t
    JOIN (SELECT @running_total := 0) r
ORDER BY t.id

注:

  • JOIN (SELECT @running_total := 0) r是交叉连接,允许不需要单独声明变量。SET命令。
  • 表别名,r,对于任何子查询/派生表/内联视图,MySQL都需要

注意事项:

  • 特定于MySQL;不能移植到其他数据库
  • ORDER BY非常重要;它确保顺序与op匹配,并对更复杂的变量使用有更大的影响(IE:psuedo行)。_MySQL缺乏的数字/排名功能)

扫码关注云+社区