前言
最近想把之前在leetcode练习的mysql专题梳理一遍,该系列主要是个人的学习总结,以方便之后个人时不时可以来翻阅复习。
(若有侵权,请联系我,会立即删除文章)
一、问题描述
二、代码实现
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聚合,查询结果是分组组别和聚合字段。
当查询结果除了以上两个字段外还要有其他字段时则用开窗函数。