力扣184(MySQL)-部门工资最高的员工(中等)
题目:
表: Employee
表: Department
编写SQL查询以查找每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
查询结果格式如下例所示。
解题思路:
方法一:窗口函数和多表联结
①先将Employee表按部门id分组,然后再按薪资进行降序排序。
②将临时表与department通过部门id连起来,然后再筛选出排名为1的相关数据。
1 # Write your MySQL query statement below 2 SELECT 3 b.name AS Department, 4 a.name AS Employee, 5 salary as Salary 6 FROM 7 ( SELECT 8 name, 9 departmentId, 10 salary, 11 dense_rank ( ) over ( 12 PARTITION BY departmentId ORDER BY salary desc ) AS rnk 13 FROM Employee 14 ) AS a 15 JOIN Department b ON a.departmentid = b.id 16 WHERE 17 a.rnk = 1;
方法二:多表联结和 IN
①先找到每个部门下的最大薪资,以部门id进行分组,作为后续的筛选条件
②将两个表通过部门id进行联结
③最后从联结的表中以第一步查找的结果为条件筛选出符合要求的部门最高的薪资。
小知识:
①窗口函数:dense_rank ( ) over ( PARTITION BY ... ORDER BY ... desc ) :相同的序号一样,下一个不同的连续数字(1,2,2,3...)
其实这里用rank()也可以,相同的序号一样,下一个不同的跳跃。(1,2,2,4...)
②sql中的内连接【交集】:inner join...on ...(简写为join...on...)
③in:可以同时in查询两个字段的不同值。
标签:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)