Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取MYSQL中当前行之前的行的总和?_Mysql_Sql - Fatal编程技术网

如何获取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,但这很酷;