为了账号安全,请及时绑定邮箱和手机立即绑定

在MySQL中创建累积和列

在MySQL中创建累积和列

森栏 2019-06-14 15:35:53
在MySQL中创建累积和列我有张桌子看起来像这样:id   count1    1002    503    10我想添加一个名为累加和的新列,因此表如下所示:id   count  cumulative_sum1    100    1002    50     1503    10     160是否有MySQL UPDATE语句可以很容易地做到这一点?做这件事最好的方法是什么?
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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

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

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

set @csum := 0;select id, count, (@csum := @csum + count) as cumulative_sumfrom YourTableorder by id;

这是以一种运行方式计算运行和:)


查看完整回答
反对 回复 2019-06-14
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

使用相关查询:


  SELECT t.id,
         t.count,
         (SELECT SUM(x.count)
            FROM TABLE x           WHERE x.id <= t.id) AS cumulative_sum    FROM TABLE tORDER 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) rORDER BY t.id

注:

  • 这个

    JOIN (SELECT @running_total := 0) r

    是交叉连接,并且允许在不需要单独声明的情况下进行变量声明。

    SET

    命令。
  • 表化名,

    r

    ,对于任何子查询/派生表/内联视图,MySQL都需要

注意事项:

  • 特定于MySQL;不能移植到其他数据库
  • 这个

    ORDER BY

    很重要;它确保顺序与OP匹配,并且对于更复杂的变量使用有更大的影响(IE:psuedo ROW_Number/RANK功能,MySQL缺乏这种功能)


查看完整回答
反对 回复 2019-06-14
?
精慕HU

TA贡献1845条经验 获得超8个赞

MySQL8.0/MariaDB支持窗口SUM(col) OVER():

SELECT *, SUM(cnt) OVER(ORDER BY id) AS cumulative_sumFROM tab;

产出:

┌─────┬──────┬────────────────┐

│ id  │ cnt  │ cumulative_sum │

├─────┼──────┼────────────────┤

│  1  │ 100  │            100 │

│  2  │  50  │            150 │

│  3  │  10  │            160 │

└─────┴──────┴────────────────┘

DB<>小提琴


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 658 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信