力扣185(MySQL)-部门工资前三高的所有员工(困难)
题目:
表: Employee
表: Department
公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。
编写一个SQL查询,找出每个部门中 收入高的员工 。
以 任意顺序 返回结果表。
查询结果格式如下所示
输出:
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/department-top-three-salaries
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
方法一:窗口函数dense_rank()、内连接join、between...and
①先将employee表按部门号进行分组,按salary进行降序排序。
1 SELECT name, salary, departmentId, dense_rank ( ) over ( PARTITION BY departmentId ORDER BY salary DESC ) AS rnk
2 FROM employee
②再将第一步查询出来的临时表与depatment表通过部门id联结起来,然后筛选出排序数字在1-3的行数据。
1 SELECT
2 b.name as department,
3 a.name as employee,
4 salary
5 FROM
6 ( SELECT name, salary, departmentId, dense_rank ( )over ( PARTITION BY departmentId ORDER BY salary DESC ) AS rnk
7 FROM employee ) as a
8 JOIN department b
9 ON a.departmentId = b.id
10 WHERE a.rnk between 1 AND 3;
#between and可以替换成 a.rnk <= 3
方法二:先找出前三大的薪水,从e2表里寻找在相同部门中比自身e1表更高的工资值,只需要找比当前工资大0,1,2个的,这样自己排第三就刚好第三高薪资。然后把表 Department 和表 Employee 连接,获得各个部门工资前三高的员工
1 SELECT
2 department.name AS department,
3 e1.name AS employee,
4 e1.salary AS salary
5 FROM
6 employee e1,department
7 WHERE
8 e1.departmentId = department.id
9 AND (
10 SELECT count( DISTINCT e2.salary )
11 FROM employee e2
12 WHERE e1.salary < e2.salary
13 AND e1.departmentId = e2.departmentId
14 ) < 3
15 ORDER BY
16 department.name,
17 e1.salary DESC;
小知识:
①窗口函数:dense_rank() over(partition by 分组字段 order by 排序字段):排序序号连续:1,2,2,3...
力扣185(MySQL)-部门工资前三高的所有员工(困难)的更多相关文章
- 185. 部门工资前三高的所有员工 + 多表联合 + join + dense_rank()
185. 部门工资前三高的所有员工 LeetCode_MySql_185 题目描述 方法一:使用join on # Write your MySQL query statement below sel ...
- 部门工资前三高的所有员工 - LeetCode
Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId . +----+-------+--------+---- ...
- Leetcode的SQL题解:185. 部门工资前三高的员工
题目 查询部门工资前三高的员工. 我用的数据库是oracle. 下面是数据表的信息. Employee表数据: | ID | NAME | Salary | DepartmentId | | -- | ...
- [SQL]LeetCode185. 部门工资前三高的员工 | Department Top Three Salaries
SQL 架构 Create table If Not Exists Employee (Id ), Salary int, DepartmentId int) Create table If Not ...
- sql查询:部门工资前三高的员工和部门工资最高的员工
创建表:Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);Cr ...
- SQL查询每个部门工资前三名的员工信息
--通用sql select deptno, ename, sal from emp e1 where ( ) from emp e2 where e2.deptno=e1.deptno and e2 ...
- mysql查询每个部门/班级前几名
Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id . +----+-------+--------+--------------+ | I ...
- mysql查询之部门工资最高的员工
最近发现一个网站 力扣 查看 上面有很多算法和数据库的题目,做了一下,发现自己平时都疏忽了,因此边做边记录下来 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 de ...
- LeetCode:184.部门工资最高的员工
题目链接:https://leetcode-cn.com/problems/department-highest-salary/ 题目 Employee 表包含所有员工信息,每个员工有其对应的 Id, ...
- [SQL]LeetCode184. 部门工资最高的员工 | Department Highest Salary
The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...
随机推荐
- win10 vscode 设置 快捷键 ctrl + , ctrl + COMMA 与搜狗输入法 切换方法快捷键 冲突
win10 vscode 快捷键 ctrl + , ctrl + COMMA 与搜狗输入法 切换方法快捷键 冲突 没想到是在系统里面 Step. 1: 选择切换语音 Step. 2: 选择 键盘 St ...
- Prometheus四种指标及PromQL实例
Prometheus四种主要的指标类型包括Counter.Gauge.Histogram和Summary,以及相应的PromQL实例如下: Counter(计数器) 作用:只增不减的计数器,常用于记录 ...
- ubuntu下安装numpy和scipy正确方法
1.numpy NumPy(Numeric Python)是用Python进行科学计算的基本软件包. NumPy是Python编程语言的扩展,增加了对大型多维数组和矩阵的支持,以及一个大型的高级数学函 ...
- Windows 环境使用 Xshell 连接 VMware 虚拟机上的 CentOS 系统
1.VMware 点击虚拟机的设置,打开弹窗,网络使用 NAT 模式 2.VMware 菜单栏:点击 编辑>>>虚拟网络编辑器 (1)选择 VMnet8 (2)选择 NAT 模式 ( ...
- python高级技术(进程一)
一 什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实 ...
- HDU 2045:不容易系列之(3)—— LELE的RPG难题(动态规划)
一.原题链接 Problem - 2045 (hdu.edu.cn) 二.题面 人称"AC女之杀手"的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多"Cole&quo ...
- 【Leetcode】768. 最多能完成排序的块 II
题目(链接) arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个"块",并将这些块分别进行排序.之后再连接起来,使得连接的结果和按升序排序后的原数组相同. 我们最多能 ...
- 【LeetCode刷题】剑指Offer 48.最长不含重复字符的子字符串
剑指Offer 48.最长不含重复字符的子字符串(点击跳转LeetCode) 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcab ...
- 记录--用Echarts打造自己的天气预报!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 最近刚刚学习了Echarts的使用,于是想做一个小案例来巩固一下.项目效果如下图所示: 话不多说,开始进入实战. 创建项目 这里我们 ...
- CentripetalNet:更合理的角点匹配,多方面改进CornerNet | CVPR 2020
CentripetalNet的核心在于新的角点匹配方式,额外学习一个向心偏移值,偏移值足够小的角点即为匹配,相对于embedding向量的匹配方式,这种方法更为鲁棒,解释性更好.另外论文提出的十字星变 ...