如何获取MYSQL中当前行之前的行的总和?
可能重复: 好的,这个问题一点也不清楚,所以举个例子: 我有一张这样的桌子:如何获取MYSQL中当前行之前的行的总和?,mysql,sql,Mysql,Sql,可能重复: 好的,这个问题一点也不清楚,所以举个例子: 我有一张这样的桌子: id amount 1 1000 2 2500 3 5000 我需要从中选择以下数据: id oamount total 1 1000 1000 2 2500 3500 3 5000 8500 我试过这个,但不正确: select *,sum(oamount) from `ta
id amount
1 1000
2 2500
3 5000
我需要从中选择以下数据:
id oamount total
1 1000 1000
2 2500 3500
3 5000 8500
我试过这个,但不正确:
select *,sum(oamount) from `table`
group by id;
我想不出来试试下面的方法:
select
*,
(select sum(oamount) from `table` WHERE id <= t.Id) AS total
from `table` AS t
我回答了一个非常类似的问题,他们试图获得每天开始/结束时的现金流余额 你的会非常相似。。。按照您想要的最终顺序预查询数据,即:起始ID将是结果集的第一个,然后应用您想要的MySQL变量
select
PreAgg.ID,
PreAgg.Amount,
@PrevBal := @PrevBal + PreAgg.Amount as Total
from
( select
YT.id,
YT.amount
from
YourTable YT
order by
YT.id ) as PreAgg,
( select @PrevBal := 0.00 ) as SqlVars
我实际上保留了预聚合作为查询。。。如果您想实际执行一些聚合,比如基于每天的事务,或者应用一些其他WHERE子句。这将允许灵活性,以确保在开始@PrevBal累积之前准备好最终输出订单
SELECT id,amount,@total := @total + amount
FROM `table`, (SELECT @total := 0) as dummy
ORDER BY id;
请注意,使用GROUP BY子句/聚合时,这不起作用。请尝试以下操作:
SET @res:=0;
SELECT
t.a,
t.b,
(@res := @res + t.b) AS summ
FROM
(SELECT first AS a, second AS b FROM table GROUP BY a ORDER BY a) AS t
replace<替换为虽然它可以工作,但取决于数据的大小,可能会变得很痛苦,5记录必须在子查询中计算5+4+3+2+1个实例。。。用1000个条目再试一次…@DRapp Yep,性能杀手。这是一个快速而简单的决定。性能效果会略有不同我考虑了一些带有游标和循环的PL/SQL,但这很酷;