题解 | #获取每个部门中当前员工薪水最高的相关信息#

获取每个部门中当前员工薪水最高的相关信息

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升序排序。
全部评论

相关推荐

挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 75人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务