2009-10-17 136 views
1

我应该在MySQL数据库中执行什么查询以获取包含源表的部分总和的结果?计算部分总和的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 

现在我得到这样的结果与包含光标,而存储过程循环。我想找到一个更好的方法来做到这一点。

回答

3

你可以通过加入表格本身来做到这一点。总和加起来都行到这行:

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 
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