如何在mysql中将值逐行求和?

时间:2019-03-21 09:35:38

标签: mysql sql

让我说我在mysql中有这样的数据:

date | value
2010 | 1
2011 | 4
2012 | 2
2013 | 3

我想要这样的结果:

date | value
2010 | 1
2011 | 5
2012 | 7
2013 | 10

我认为这很简单。我正在尝试:

select tabelA.date, sum(value)
from tabelA
inner join (select date from tabelA group by date) b on tabelA.date > b.date
group by tabelA.date

我觉得我缺少明显的东西。看起来很简单。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

MySQL 8+中最好的方法是窗口函数:

select a.date,
       sum(a.value) over (order by a.date)
from tabelA a
order by a.date;

在旧版本中,变量可能是最好的方法,但必须谨慎使用:

select date, (@csum := @csum + value) as running_sum
from (select a.date, a.value as value
      from tableA a
      order by a.date
     ) a cross join
     (select @csum := 0) params;

尤其是,您希望子查询中的order by确保以正确的顺序处理数据。

答案 1 :(得分:0)

SELECT
    b.date,( SELECT sum( a.`value` ) FROM aa a WHERE a.date <= b.date ) value
FROM
    aa b 
GROUP BY
    b.date

答案 2 :(得分:0)

您可以使用变量:

SET @cumulative := 0;
SELECT date, (@cumulative := @cumulative+value) as value FROM tabelA

这只会跟踪当前金额。从本质上说,它是this answer的次要调整,以获取行号。