4、刷sql题第四天

题目内容:

表: Employee
在这里插入图片描述
表: Department
在这里插入图片描述
编写SQL查询以查找每个部门中薪资最高的员工
任意顺序 返回结果表。
查询结果格式如下例所示。
示例 1:
在这里插入图片描述

我的思路:

看到题目内容,求每个部门中薪资最高的员工,很明显是分组TopN的问题,开窗+rank即可。代码如下:

select
    t3.name Department,
    t2.name Employee,
    t2.salary Salary
from
(
    select
        name,
        salary,
        departmentId
    from
    (
        select
            name,
            salary,
            departmentId,
            rank() over(partition by departmentId order by salary desc) rk
        from Employee
    )t1
    where t1.rk=1
)t2
join
(
    select
        id,
        name
    from Department
)t3
on t2.departmentId=t3.id

我这里是先根据部门id求出每个部门最高工资的一条数据(如果有并列的话是多条数据),然后再跟部门表外连接获得部门名称。
也可以先全外连接然后再分组topN,只不过先全外连接可能join的数据量会大一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值