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

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

相关推荐
颜酱5 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_736919105 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878385 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
DuHz5 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女6 小时前
TRSV优化2
算法
代码游侠6 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法
2301_763472466 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
abluckyboy7 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
园小异7 小时前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
m0_706653237 小时前
分布式系统安全通信
开发语言·c++·算法