Employee 表保存了一年内的薪水信息,请你编写 SQL 语句,对于每个员工,查询他除最近一个月(即最大月)之外,剩下每个月的近三个月的累计薪水(不足三个月也要计算),结果请按 Id 升序,然后按 Month 降序显示。 建表语句: drop table Employee; Create table If Not Exists Employee (id int, month int, salary int); Truncate table Employee; 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'); insert into Employee (id, month, salary) values ('1', '7', '90'); insert into Employee (id, month, salary) values ('1', '8', '90');
时间: 2023-08-20 12:56:56 浏览: 148
请使用以下 SQL 语句来查询每个员工除最近一个月之外的近三个月的累计薪水:
```sql
SELECT e.id, e.month, SUM(e.salary) AS cumulative_salary
FROM Employee e
WHERE (e.id, e.month) NOT IN (
SELECT id, MAX(month)
FROM Employee
GROUP BY id
)
AND e.month >= (
SELECT MAX(month) - INTERVAL 3 MONTH
FROM Employee
)
GROUP BY e.id, e.month
ORDER BY e.id ASC, e.month DESC;
```
运行以上 SQL 语句后,将按照员工的 Id 升序和 Month 降序显示结果。
相关问题
Employee 表保存了一年内的薪水信息,请你编写 SQL 语句,对于每个员工,查询他除最近一个月(即最大月)之外,剩下每个月的近三个月的累计薪水(不足三个月也要计算),结果请按 Id 升序,然后按 Month 降序显示。
可以使用子查询和窗口函数来实现这个查询:
```
SELECT
t1.Id,
t1.Month,
SUM(t1.Salary) OVER (PARTITION BY t1.Id ORDER BY t1.Month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS CumulativeSalary
FROM
Employee AS t1
WHERE
t1.Month < (SELECT MAX(Month) FROM Employee WHERE Id = t1.Id)
ORDER BY
t1.Id ASC,
t1.Month DESC;
```
首先,我们使用子查询获取每个员工的最大月份。然后,我们使用窗口函数对每个员工的薪水进行累计求和,但是只计算前三个月的薪水(包括当前月份)。最后,我们按照 Id 升序,Month 降序的顺序排序结果。
阅读全文
相关推荐







