在MySQL中创建累积和列我有张桌子看起来像这样:id count1 1002 503 10我想添加一个名为累加和的新列,因此表如下所示:id count cumulative_sum1 100 1002 50 1503 10 160是否有MySQL UPDATE语句可以很容易地做到这一点?做这件事最好的方法是什么?
3 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
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;
慕田峪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缺乏这种功能)
精慕HU
TA贡献1845条经验 获得超8个赞
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 │
└─────┴──────┴────────────────┘
添加回答
举报
0/150
提交
取消