Leetcode --- mysql 专题 --- 185题:部门工资前三高的员工(中等)

文章详细介绍了如何使用MySQL的窗口函数dense_rank()解决查找每个部门工资前三高的员工的问题。通过左连接员工和部门表,然后应用dense_rank()进行排序,最终筛选出排名在1到3的记录。文章强调了常规聚合函数与窗口函数在复杂查询中的区别。
摘要由CSDN通过智能技术生成

前言

最近想把之前在leetcode练习的mysql专题梳理一遍,该系列主要是个人的学习总结,以方便之后个人时不时可以来翻阅复习。
(若有侵权,请联系我,会立即删除文章)


一、问题描述

难度中等185题:部门工资前三高的员工(中等)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码实现

1.代码思路

部门工资前三的员工,自然想到需要排序,而且结果要有部门、员工名字、工资,所以想到用开窗函数dense_rank()。
前三名,where 子句用in

2.具体代码

select Department, name Employee,salary Salary
from(
    select e.*,d.name Department,
            dense_rank() over(partition by departmentId order by salary DESC) dk
    from Employee e
    left join Department d
    on e.departmentId = d.id)e1
where dk in (1,2,3)

总结

一般的聚合函数count()、sum()、avg()、max()、min():只能用在group by聚合,查询结果是分组组别和聚合字段。
当查询结果除了以上两个字段外还要有其他字段时则用开窗函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值