sso*_*zak 2 mysql stored-procedures
我应该在 MySQL 数据库中执行什么查询以获得包含源表部分总和的结果?
例如,当我有桌子时:
Id|Val
1 | 1
2 | 2
3 | 3
4 | 4
Run Code Online (Sandbox Code Playgroud)
我想得到这样的结果:
Id|Val
1 | 1
2 | 3 # 1+2
3 | 6 # 1+2+3
4 | 10 # 1+2+3+4
Run Code Online (Sandbox Code Playgroud)
现在我通过一个包含游标和 while 循环的存储过程得到这个结果。我想找到一种更好的方法来做到这一点。
您可以通过加入表格本身来做到这一点。SUM 会将所有行相加到这一行:
select cur.id, sum(prev.val)
from TheTable cur
left join TheTable prev
on cur.id >= prev.id
group by cur.id
Run Code Online (Sandbox Code Playgroud)
MySQL 还允许使用用户变量来计算它,这更有效,但被认为是一种黑客:
select
id
, @running_total := @running_total + val AS RunningTotal
from TheTable
Run Code Online (Sandbox Code Playgroud)