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

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

我觉得我遗漏了一些明显的东西。想要做这件事似乎很简单。

有什么想法吗?

最佳答案

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 确保以正确的顺序处理数据。

关于mysql - 如何在 mysql 中将值逐行求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55277372/

相关文章:

mysql - Laravel - 使用 `SQL_CALC_FOUND_ROWS` 与急切加载关系返回错误计数

php - if else 条件未验证 php mysql 中的 mysql 查询

java - 如何将一组允许值中的字符串参数传递给函数

mysql - 从多个数据库查询的快速方法

MySQL 问题 - 使用 'string_value' 查询数据库属性对某些属性返回 0 而对其他属性返回所有行,为什么?

php - 使用 Laravel 的 Eloquent 或查询构建器加快数据库访问速度

php - 如何使用 Mysql 和 PHP 从多个表中过滤数据,映射日期范围与当前日期

mysql - 使用元素将 xml 加载到 mysql 表中

mysql - 使用脚本将数据加载到数据库--sql

c# - GridView ASP.NET C# 中的丑陋时间格式