如何在MySQL中有一个包含较小ID的列?

时间:2014-11-15 22:05:17

标签: mysql sum

假设我有一个这样的表:

id  pay
--  ---
1   10
2   20
3   30
4   40
5   50
6   60

我想用上面的表格创建一个视图:

id  pay  paid_before
--  ---  -------------
1   10   0
2   20   10
3   30   30
4   40   60
5   50   100
6   60   150

" paid_before"是具有较小id的支付行的总和。

我怎么能做这份工作?

2 个答案:

答案 0 :(得分:1)

这可以实现你想要的。

SELECT p1.id,p1.pay, sum(p2.pay) as Paid_Before FROM PAYMENTS P1 LEFT JOIN 
PAYMENTS P2 ON p1.id > p2.id
GROUP BY p1.id, p1.pay

请参阅此sql fiddle

答案 1 :(得分:0)

在MySQL中,这可以通过变量最有效地完成:

select p.id, p.pay, (@p := @p + p.pay) - p.pay as PaidBefore
from payments p cross join
     (select @p := 0) vars
order by id;

虽然这不是标准的SQL(我通常更喜欢),但这没关系。标准SQL解决方案是使用累积和:

select p.id, p.pay, sum(p.pay) over (order by p.id) - p.pay as PaidBefore
from payments p;

许多数据库都支持这种语法,但不支持MySQL。

SQL Fiddle(由Atilla提供)是here