我应该在MySQL数据库中执行哪些查询来获取包含源表的部分总和的结果?
例如,当我有桌子时:
Id|Val
1 | 1
2 | 2
3 | 3
4 | 4
我想得到这样的结果:
Id|Val
1 | 1
2 | 3 # 1+2
3 | 6 # 1+2+3
4 | 10 # 1+2+3+4
现在我使用包含游标和while循环的存储过程获得此结果。我想找到一个更好的方法来做到这一点。
答案 0 :(得分:4)
您可以通过自己加入表格来完成此操作。 SUM将累计到该行的所有行:
select cur.id, sum(prev.val)
from TheTable cur
left join TheTable prev
on cur.id >= prev.id
group by cur.id
MySQL还允许使用用户变量来计算这个,这更有效但被认为是黑客攻击:
select
id
, @running_total := @running_total + val AS RunningTotal
from TheTable
答案 1 :(得分:0)
SELECT l.Id, SUM(r.Val) AS Val
FROM your_table AS l
INNER JOIN your_table AS r
ON l.Val >= r.Val
GROUP BY l.Id
ORDER By l.Id