mysql - 运行总计 MySQL 显示行的总和

标签 mysql sql cumulative-sum

我有下表:

+-------------+-------+-------+
|    date     | agent |  hold |
+-------------+-------+-------+
| 2017-01-01  | A     |   100 |
| 2017-01-01  | B     |   200 |
| 2017-01-02  | C     |   400 |
+-------------+-------+-------+

我的添加运行总计的查询:

SET @runtot:=0;
SELECT
 date,
  SUM(CASE WHEN agent = 'A' THEN hold ELSE 0 END) AS A,
  SUM(CASE WHEN agent = 'B' THEN hold ELSE 0 END) AS B,
 SUM(CASE WHEN agent = 'C' THEN hold ELSE 0 END) AS C,
SUM(CASE WHEN agent = 'D' THEN hold ELSE 0 END) AS D,
sum(hold) as Total,
(@runtot := @runtot + sum(hold)) AS rt
FROM daily_results
group by date

但是我在 rt 列中得到每行的总和(保持)作为运行总计。我做错了什么?

最佳答案

按照建议使用汇总,或者将聚合移动到子查询并在主查询中执行运行总计。例如 鉴于

+------------+------------+---------+
| tanggal    | iddowntime | idshift |
+------------+------------+---------+
| 2017-10-03 | MOR01      |       1 |
| 2017-10-03 | NF001      |       2 |
| 2017-10-03 | MOR01      |       2 |
| 2017-10-02 | MOR01      |       2 |
| 2017-10-03 | NF001      |       2 |
| 2017-10-02 | MOR01      |       1 |
| 2017-10-02 | NF001      |       1 |
| 2017-10-02 | NF001      |       1 |
+------------+------------+---------+
8 rows in set (0.00 sec)

select s.*,
        @rt:=@rt + total RunningTotal
from
(
SELECT
  tanggal,
  SUM(CASE WHEN iddowntime = 'mor01' THEN idshift ELSE 0 END) AS A,
  SUM(CASE WHEN iddowntime = 'nf001' THEN idshift ELSE 0 END) AS B,
  #SUM(CASE WHEN agent = 'C' THEN hold ELSE 0 END) AS C,
  #SUM(CASE WHEN agent = 'D' THEN hold ELSE 0 END) AS D,
  sum(idshift) as Total
FROM trans_lhpdtdw
where iddowntime in('mor01','nf001')
group by tanggal 
) s
cross join
(select @rt:=0) rt

+------------+------+------+-------+--------------+
| tanggal    | A    | B    | Total | RunningTotal |
+------------+------+------+-------+--------------+
| 2017-10-02 |    3 |    2 |     5 |            5 |
| 2017-10-03 |    3 |    4 |     7 |           12 |
+------------+------+------+-------+--------------+
2 rows in set (0.01 sec)

关于mysql - 运行总计 MySQL 显示行的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50045964/

相关文章:

mysql - 连接到 npm/mysql 中的 Azure Database for MySQL

mysql - SQL select in select where 从结果中获取最大值

c# - 使用 ORM 创建数据库

r - 具有各种 IF 的矢量,加法和减法

tsql - SQL Server 查询,在 View 中运行总计,在 A 列更改时重置

php - 简单查询中的 MySQL 语法错误

mysql - 获取至少有3个项目的所有账户

mysql - SQL触发器查询错误

mysql - 如何对mysql中的变量进行模式匹配

python - 在定义函数时,非默认参数跟在默认参数之后