【问题标题】:Calculate running total from single table从单个表计算运行总计
【发布时间】:2015-10-28 01:15:28
【问题描述】:

我想根据以前的数据得到当前的总和。示例:

*******************************************
*    Current balance    *    Total sum    *
*******************************************
     8500                    8500
     -500.50                 7999.50
     380.90                  8380.40
     -5500                   2880.40

我没有任何自己的代码要显示,因为除了使用简单的SUM() (SELECT SUM(data_sum) FROM table ...) 之外,我不知道如何完成此操作。

我发现了很多类似的问题,但我不明白答案(example 1)。

这是我的桌子:

`id` int(11) NOT NULL AUTO_INCREMENT,
`id_user` int(11) DEFAULT NULL,
`id_account` int(11) DEFAULT NULL,
`id_account_to` int(11) DEFAULT NULL,
`id_store` int(11) DEFAULT NULL,
`id_image` int(11) DEFAULT NULL,
`data_name` varchar(45) NOT NULL,
`data_name_short` varchar(45) NOT NULL,
`data_sum` decimal(10,2) DEFAULT NULL,
`data_file` text NOT NULL,
`data_note` text NOT NULL,
`is_transfered` tinyint(4) DEFAULT NULL,
`add_time` tinyint(4) DEFAULT NULL,
`datetime_payed` datetime NOT NULL,
`datetime_added` datetime NOT NULL,
`datetime_edited` datetime NOT NULL

现在我的问题是:如何根据上表让 SQL 查询像第一个示例中那样计算运行总计?

【问题讨论】:

  • @sgeddes 就是这样(正如我在问题中明确表示的那样):我不明白答案!
  • 您引用了sql server 的解决方案,但您标记了mysql -- 实现方式大不相同......另一个很棒的帖子 -- stackoverflow.com/a/2563940/1073631
  • 这个问题和我的几乎一样,我在谷歌搜索后发现了这个问题。正如我在问题中所说,我不知道 SQL 查询会是什么样子,因为我以前从未这样做过。不过,戈登确实正确回答了我的问题。

标签: mysql cumulative-sum


【解决方案1】:

您可以使用变量来做到这一点:

select data_sum, (@s := @s + data_sum) as cume_sum
from table t cross join
     (select @s := 0) params
order by ??;

在进行累积和时,您应该按某个值(通常是时间列)进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 2023-03-23
    • 2012-07-03
    • 1970-01-01
    • 2020-06-30
    • 2014-06-14
    • 2017-03-25
    • 1970-01-01
    相关资源
    最近更新 更多