【问题标题】:Use cumulative sum to count the sum in a loop使用累积和计算循环中的总和
【发布时间】:2013-01-19 10:04:04
【问题描述】:

我有一个foreach,可以打印数据库中的所有数据。数据如下所示:

data_sum
63
78
25
35

对于循环中的每一行,我想添加总和,如下所示:

data_sum
63
141
166
201

我已尝试使用此 SQL 查询:

SET @csum := 63;
SELECT id_account, data_sum, is_expense, (@csum := @csum + data_sum) AS cumulative_sum FROM economy_events
WHERE id_account = '4'
AND is_expense = '1'

但我只有在试用时才收到SQLSTATE[HY000]: General error。这是我第一次尝试使用这种方法。我做错了什么?

提前致谢。

【问题讨论】:

  • 你在用什么RDBMSSQL Server? MySQL? Oracle? DB2?等等。
  • 首先,您必须定义一些处理数据的顺序。
  • JW:我正在使用 MySQL。哈姆雷特:你的意思是使用简单的ORDER BY data_sum DESC 或类似的东西?

标签: mysql sql cumulative-sum


【解决方案1】:

直接从您的问题粘贴时,您的查询在 MySQL(至少 5.1、5.5 和 5.6)中有效。

查看这个 SQLfiddle:http://sqlfiddle.com/#!8/53241/1/1

但是,您应该将 @csum 初始化为 0 以重现您想要的输出。 此外,为了使累积总和有意义,您需要添加一个 order by 子句添加到您的查询中。

如果您从某种编程语言运行查询,问题可能是续行有问题,或者查询包含两个语句。

您可以尝试将查询重写为

SELECT id_account, data_sum, is_expense,
       (@csum := @csum + data_sum) AS cumulative_sum
FROM economy_events, (SELECT @csum := 0) AS csums
WHERE id_account = '4'
AND is_expense = '1'

【讨论】:

    猜你喜欢
    • 2019-07-08
    • 2023-01-18
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2020-11-04
    • 2018-11-08
    相关资源
    最近更新 更多