一天一道Sql题(day04)

185. 部门工资前三高的所有员工 - 力扣(LeetCode)

思路:本题主要考察开窗函数的使用(官方答案未使用开窗,但是我觉得答案可能是在mysql8.0之前写的,当时还没有开窗函数)

先对Employee表增加一列不同部门下薪资的排名(pm),在关联Department查询出结果需要的字段即可。在这里排名时要使用dense_rank() 函数。

排名函数有三个:row_number()、rank()、dense_rank()

row_number(): 严格按照1234排序,相等的数据排名也是不同的

rank(): 1 2 2 4 5 6 6 8

dense_rank():1 2 2 3 4 5 5 6

sql:

复制代码
with e as (
    select name,salary,departmentId
    ,dense_rank() over(partition by departmentId order by salary desc) pm
    from Employee
)
select d.name as Department
,e.name as Employee
,e.salary 
from e,department d 
where e.departmentId=d.id and pm <=3

dense_rank() over(partition by departmentId order by salary desc) pm

会开窗的小伙伴都能看懂,不会的小伙伴建议去学一下开窗~

相关推荐
Da Da 泓2 小时前
LinkedList模拟实现
java·开发语言·数据结构·学习·算法
未知陨落2 小时前
LeetCode:68.寻找两个正序数组的中位数
算法·leetcode
努力学习的小廉4 小时前
我爱学算法之—— 模拟(下)
c++·算法
海琴烟Sunshine5 小时前
Leetcode 26. 删除有序数组中的重复项
java·算法·leetcode
PAK向日葵6 小时前
【算法导论】NMWQ 0913笔试题
算法·面试
PAK向日葵6 小时前
【算法导论】DJ 0830笔试题题解
算法·面试
PAK向日葵6 小时前
【算法导论】LXHY 0830 笔试题题解
算法·面试
麦麦麦造6 小时前
DeepSeek突然发布 V3.2-exp,长文本能力加强,价格进一步下探
算法
lingran__8 小时前
速通ACM省铜第十七天 赋源码(Racing)
c++·算法
MobotStone8 小时前
手把手教你玩转AI绘图
算法