题解 | #获取每个部门中当前员工薪水最高的相关信息#
获取每个部门中当前员工薪水最高的相关信息
https://www.nowcoder.com/practice/4a052e3e1df5435880d4353eb18a91c6
select
D.dept_no,
D.emp_no,
D.salary
from
(
select
rank()over(partition by C.dept_no order by C.salary desc) posn,
C.dept_no,
C.emp_no,
C.salary
from
(
select
A.dept_no,
A.emp_no,
B.salary
from
dept_emp A
join salaries B on A.emp_no = B.emp_no
where
A.to_date = '9999-01-01'
and B.to_date = '9999-01-01'
) C
) D
where D.posn=1
order by D.dept_no
本题关键是要理清思路,有三层select查询,共分为4步:
1.贯穿整个代码的有三个字段dept_no、emp_no、salary,想好这一点,就开始思考下一步;
2.先做表连接,找到连接键,注意别名C;
3.套个子查询,后续整个表别名D,使用窗口函数rank()over(),对链接后的表格C进行对C.dept_no聚合、对C.salary降序排序,别名posn;(窗口函数只是复制一个新的表进行排序,然后将序号返回到原表各自行的位置)
4.再套个子查询,直接用where筛选D表每个部门薪水排名第一的行,然后用order by对D.dept_no升序排序。