赞
踩
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');
-

试题说明:
我的答案,其实也很奇怪
- select id, month, sum(salary) over (partition by id order by month desc)
- from (select id,
- month,
- salary,
- row_number() over (partition by id order by month ) mm
- from Employee) A
- where (id, month)
- not in (select id, max(month)
- from Employee
- group by id)
- and mm <= 3;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。