随笔 - 384  文章 - 0  评论 - 0  阅读 - 13万

力扣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查询两个字段的不同值。

posted on   我不想一直当菜鸟  阅读(213)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示