力扣-部门工资前三高的所有员工
所有 员工 力扣 部门 工资
2023-09-14 09:13:33 时间
大家好,我是空空star,本篇带大家了解一道稍微复杂的力扣sql练习题。
前言
上一篇带大家练习了部门工资最高的员工,如果大家掌握了的话,本篇这道题就很容易了。
一、题目:185. 部门工资前三高的所有员工
表: Employee
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| id | int |
| name | varchar |
| salary | int |
| departmentId | int |
+--------------+---------+
Id是该表的主键列。
departmentId是Department表中ID的外键。
该表的每一行都表示员工的ID、姓名和工资。它还包含了他们部门的ID。
表: Department
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| name | varchar |
+-------------+---------+
Id是该表的主键列。
该表的每一行表示部门ID和部门名。
公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。
编写一个SQL查询,找出每个部门中 收入高的员工 。
以 任意顺序 返回结果表。
查询结果格式如下所示。
二、解题
1.正确示范①
提交SQL
select u2.name Department,
u1.name Employee,
u1.salary Salary
from(
select id,name,
salary,
departmentId,
dense_rank() over(partition by departmentId order by salary desc ) col
from Employee
) u1
left join Department u2
on u1.departmentId=u2.id
where col<=3
order by u1.id
运行结果
![](https://img-blog.csdnimg.cn/d403ffb792f340d0bde3be1e8860b4c7.png)
2.正确示范②
提交SQL
select d.name Department,
u1.name Employee,
u1.salary Salary
from Employee u1
join Department d
on u1.departmentId=d.id
where 3 >
(
select count(distinct u2.Salary)
from Employee u2
where u2.Salary > u1.Salary
and u1.departmentId=u2.departmentId
)
运行结果
![](https://img-blog.csdnimg.cn/5f2b716faee9493d89508528046b2fd9.png)
3.其他
总结
正确示范①思路:
dense_rank() over(partition by departmentId order by salary desc)
取排名前3
因为dense_rank()是并列排序,且不跳过重复的序号,这里不能用rank()
正确示范②思路:
找出u2表相同部门中比u1表工资更高的不同工资,这样的工资值不超过3个
相关文章
- easyUI取消选中的所有行
- Lintcode---二叉树的所有路径
- r语言 列出所有变量
- android的照片浏览器(一)至返回所有图片文件
- python获取一年所有的日期
- matlab 获取指定高程的所有点
- 得到application server上所有的logon user
- 使用jsp打印HTTP请求头部所有字段的值
- Python所有方向的学习路线,千万别做无用功了,正确掌握学习方法
- System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
- 习题4.3 编写一个Java应用程序,输出1~100之间所有既可以被3整除,又可被7整除的数。
- C++暴力枚举vector所有连续子序列
- 似乎只需要在cpp文件 #include<opencv2opencv.hpp> 就可以调用opencv里面所有的函数或者说函数接口了?
- 申请LINE 帐号的所有方法
- C/C++使用技巧(二十二):再谈C/C++多文件编译生成与调用的静态库/动态库[本文所有源码分享]
- 【回答问题】ChatGPT上线了!ChatGPT所有知识截止到了2021年!
- C++输出=号右边所有的值(三十九)