一天一道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

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

相关推荐
OOJO2 小时前
c++---list介绍
c语言·开发语言·数据结构·c++·算法·list
别或许3 小时前
1、高数----函数极限与连续(知识总结)
算法
田梓燊3 小时前
code 560
数据结构·算法·哈希算法
笨笨饿4 小时前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
kobesdu4 小时前
综合强度信息的激光雷达去拖尾算法解析和源码实现
算法·机器人·ros·slam·激光雷达
weixin_413063214 小时前
记录 MeshFlow-Online-Video-Stabilization 在线稳像
算法·meshflow·实时防抖
会编程的土豆4 小时前
【数据结构与算法】动态规划
数据结构·c++·算法·leetcode·代理模式
炘爚4 小时前
深入解析printf缓冲区与fork进程复制机制
linux·运维·算法
迈巴赫车主5 小时前
蓝桥杯19724食堂
java·数据结构·算法·职场和发展·蓝桥杯
6Hzlia6 小时前
【Hot 100 刷题计划】 LeetCode 78. 子集 | C++ 回溯算法题解
c++·算法·leetcode