猿问

在MySQL中创建累积和列

在MySQL中创建累积和列

我有张桌子看起来像这样:

id   count1    1002    503    10

我想添加一个名为累加和的新列,因此表如下所示:

id   count  cumulative_sum1    100    1002    50     1503    10     160

是否有MySQL UPDATE语句可以很容易地做到这一点?做这件事最好的方法是什么?


森栏
浏览 659回答 3
3回答

慕婉清6462132

如果性能有问题,可以使用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;这是以一种运行方式计算运行和:)

慕田峪9158850

使用相关查询:&nbsp;&nbsp;SELECT&nbsp;t.id, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.count, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SELECT&nbsp;SUM(x.count) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;TABLE&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;x.id&nbsp;<=&nbsp;t.id)&nbsp;AS&nbsp;cumulative_sum&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;TABLE&nbsp;tORDER&nbsp;BY&nbsp;t.id使用MySQL变量:&nbsp;&nbsp;SELECT&nbsp;t.id, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.count, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@running_total&nbsp;:=&nbsp;@running_total&nbsp;+&nbsp;t.count&nbsp;AS&nbsp;cumulative_sum&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;TABLE&nbsp;t&nbsp;&nbsp;&nbsp;&nbsp;JOIN&nbsp;(SELECT&nbsp;@running_total&nbsp;: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0)&nbsp;rORDER&nbsp;BY&nbsp;t.id注:这个JOIN (SELECT @running_total := 0) r是交叉连接,并且允许在不需要单独声明的情况下进行变量声明。SET命令。表化名,r,对于任何子查询/派生表/内联视图,MySQL都需要注意事项:特定于MySQL;不能移植到其他数据库这个ORDER BY很重要;它确保顺序与OP匹配,并且对于更复杂的变量使用有更大的影响(IE:psuedo ROW_Number/RANK功能,MySQL缺乏这种功能)

精慕HU

MySQL8.0/MariaDB支持窗口SUM(col) OVER():SELECT&nbsp;*,&nbsp;SUM(cnt)&nbsp;OVER(ORDER&nbsp;BY&nbsp;id)&nbsp;AS&nbsp;cumulative_sumFROM&nbsp;tab;产出:┌─────┬──────┬────────────────┐│ id&nbsp; │ cnt&nbsp; │ cumulative_sum │├─────┼──────┼────────────────┤│&nbsp; 1&nbsp; │ 100&nbsp; │&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 100 ││&nbsp; 2&nbsp; │&nbsp; 50&nbsp; │&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 150 ││&nbsp; 3&nbsp; │&nbsp; 10&nbsp; │&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 160 │└─────┴──────┴────────────────┘DB<>小提琴
随时随地看视频慕课网APP
我要回答