【SQL211】题解 | 获取每个部门中薪水最高的员工相关信息
获取每个部门中薪水最高的员工相关信息
https://www.nowcoder.com/practice/4a052e3e1df5435880d4353eb18a91c6
select dept_no, emp_no, salary from(select e.dept_no, e.emp_no, salary, dense_rank() over(partition by dept_no order by salary desc) as rk from dept_emp e join salaries s on e.emp_no = s.emp_no) a where rk = 1 order by dept_no asc;
这道题是获取每个部门中薪水最高的员工相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号dept_no升序排列。
三个关键点:
1.按照部门编号对每个部门进行分组
partition by dept_no # PARTITION BY ...:分区(按什么字段"分组计算"),这里是按照部门编号进行分组,作用是分成各个部门
2.用可重复排序窗口函数dense_rank(over order by 排序字段) as rk找出薪水最高的员工,可包含多个相同薪水的员工
dense_rank() over(partition by dept_no order by salary desc) as rk ... where rk = 1
3.按照部门编号dept_no升序排列
order by dept_no asc
完整代码如下:
select dept_no, emp_no, salary from(select e.dept_no, e.emp_no, salary, dense_rank() over(partition by dept_no order by salary desc) as rk from dept_emp e join salaries s on e.emp_no = s.emp_no) a where rk = 1 order by dept_no asc;
完结
SQL学习专栏 文章被收录于专栏
发个sql学习和实践的小记录