📢📢📢📣📣📣
 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
 一位上进心十足的【大数据领域博主】!😜😜😜
 中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
 擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
 ✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
 ❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录
- 🐴 1.SQL题目概述
- 🐴 2.解题思路
- 🐴 3.方法实现
- 🐴 4.代码测试
- 🐴 5.知识点小结
🐴 1.SQL题目概述
LeetCode原题链接
表: 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查询,找出每个部门中 收入高的员工 。
 以 任意顺序 返回结果表。
 查询结果格式如下所示。
🚩查询结果如下例所示
输入:
Employee 表:
+----+-------+--------+--------------+
| id | name | salary | departmentId |
+----+-------+--------+--------------+
| 1 | Joe | 85000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Janet | 69000 | 1 |
| 6 | Randy | 85000 | 1 |
| 7 | Will | 70000 | 1 |
+----+-------+--------+--------------+
Department 表:
+----+-------+
| id | name |
+----+-------+
| 1 | IT |
| 2 | Sales |
+----+-------+
输出:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| IT | Joe | 85000 |
| IT | Randy | 85000 |
| IT | Will | 70000 |
| Sales | Henry | 80000 |
| Sales | Sam | 60000 |
+------------+----------+--------+
解释:
在IT部门:
- Max的工资最高
- 兰迪和乔都赚取第二高的独特的薪水
- 威尔的薪水是第三高的
在销售部:
- 亨利的工资最高
- 山姆的薪水第二高
- 没有第三高的工资,因为只有两名员工
🐴 2.解题思路
🐴 3.方法实现
🌈Oracle实现
select
 m.Department as “Department”,
 m.Employee as “Employee”,
 m.Salary as “Salary”
 from
 (
 SELECT b.name AS “DEPARTMENT”,
 a.name AS “EMPLOYEE”,
 a.Salary,
 DENSE_RANK() OVER(partition by a.departmentId ORDER BY a.salary desc) rank
 FROM Employee a,Department b
 where a.departmentId = b.id
 ) m where rank<=3;
🌈MySQL实现
select
 m.Department,
 m.Employee,
 m.Salary
 from (
 SELECT b.name AS ‘Department’,
 a.name AS ‘Employee’,
 a.Salary,
 DENSE_RANK() OVER w AS ‘rank’
 FROM Employee a,Department b
 where a.departmentId = b.id
 WINDOW w AS (partition by a.departmentId ORDER BY a.salary desc)
 ) m where m.rank<=3;
🐴 4.代码测试
🐴 5.知识点小结

 综上所术,我们这里选择了DENSE_RANK()来解题
                










