【发布时间】:2017-05-14 21:53:14
【问题描述】:
问题:
Employee表保存了一年的工资信息。
编写一个 SQL 以获取员工在 3 个月内的工资累计总和,但不包括最近一个月。
结果应该按'Id'升序显示,然后'Month'降序显示。
员工表:
| Id | Month | Salary |
|----|-------|--------|
| 1 | 1 | 20 |
| 2 | 1 | 20 |
| 1 | 2 | 30 |
| 2 | 2 | 30 |
| 3 | 2 | 40 |
| 1 | 3 | 40 |
| 3 | 3 | 60 |
| 1 | 4 | 60 |
| 3 | 4 | 70 |
我的代码:
SELECT t1.Id, t1.Month,
(SELECT SUM(Salary)
FROM Employee AS t2
WHERE t1.Id = t2.Id
AND t1.Month >= t2.Month) AS Salary
FROM Employee t1
WHERE Month <> (SELECT
MAX(Month)
FROM Employee
GROUP BY t1.Id)
ORDER BY Id, Month DESC;
我的输出:
| Id | Month | Salary |
|----|-------|--------|
| 1 | 3 | 90 |
| 1 | 2 | 50 |
| 1 | 1 | 20 |
| 2 | 2 | 50 |
| 2 | 1 | 20 |
| 3 | 3 | 100 |
| 3 | 2 | 40 |
预期:
| Id | Month | Salary |
|----|-------|--------|
| 1 | 3 | 90 |
| 1 | 2 | 50 |
| 1 | 1 | 20 |
| 2 | 1 | 20 |
| 3 | 3 | 100 |
| 3 | 2 | 40 |
我使用 MAX() 和 GROUP BY() 函数来排除每个组的最近一个月,但它不适用于 Id=2。
关于如何摆脱下一行有什么建议吗?
| 2 | 2 | 50 |
提前致谢。
【问题讨论】:
-
我删除了不兼容的数据库标签。请仅使用您正在使用的数据库进行标记。
-
为什么
month = 4行被排除在结果之外? -
@vkp 因为问题想排除每个员工 ID 的最近几个月。对于 Id = 1, 3,最近的 month = 4,但对于 Id = 2,最近的 month = 2 .
标签: mysql sql group-by subquery