【发布时间】:2018-05-28 16:34:36
【问题描述】:
我正在尝试编写一个 SQL 来计算以下输入中每个组的运行总计。只是想知道如何使用 MySQL 来做到这一点。我知道如何在常规 SQL 中使用分析函数而不是在 MySQL 中执行此操作。您能否分享您对如何实施它的想法。
SQL 小提琴: http://sqlfiddle.com/#!9/59366d/19
使用窗口函数的 SQL :
SELECT e.Id,
SUM( e.Salary ) OVER( PARTITION BY e.Id ORDER BY e.Month ) AS cumm_sal
FROM Employee e
LEFT JOIN
(
SELECT Id,MAX(Month) AS maxmonth
FROM Employee
GROUP BY Id
) emax
ON e.Id = emax.Id
WHERE e.Month != emax.maxmonth
ORDER BY e.Id,e.Month DESC;
输入:
Create table Employee (Id int, Month int, Salary int);
insert into Employee (Id, Month, Salary) values ('1', '1', '20');
insert into Employee (Id, Month, Salary) values ('2', '1', '20');
insert into Employee (Id, Month, Salary) values ('1', '2', '30');
insert into Employee (Id, Month, Salary) values ('2', '2', '30');
insert into Employee (Id, Month, Salary) values ('3', '2', '40');
insert into Employee (Id, Month, Salary) values ('1', '3', '40');
insert into Employee (Id, Month, Salary) values ('3', '3', '60');
insert into Employee (Id, Month, Salary) values ('1', '4', '60');
insert into Employee (Id, Month, Salary) values ('3', '4', '70');
输出:
| Id | Month | Salary |
|----|-------|--------|
| 1 | 3 | 90 |
| 1 | 2 | 50 |
| 1 | 1 | 20 |
| 2 | 1 | 20 |
| 3 | 3 | 100 |
| 3 | 2 | 40 |
【问题讨论】:
-
在 MySQL 中使用窗口函数怎么样? dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html
-
它是关于不使用窗口函数来解决它。
-
您要显示什么运行总计?几个月?雇员?编辑您的问题以显示问题中示例输出的预期输出。
标签: mysql sql cumulative-sum