185.部门工资前三高的所有员工

张开发
2026/4/15 5:23:46 15 分钟阅读

分享文章

185.部门工资前三高的所有员工
题目表:Employee----------------------- | Column Name | Type | ----------------------- | id | int | | name | varchar | | salary | int | | departmentId | int | ----------------------- id 是该表的主键列(具有唯一值的列)。 departmentId 是 Department 表中 ID 的外键reference 列。 该表的每一行都表示员工的ID、姓名和工资。它还包含了他们部门的ID。表:Department---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ---------------------- id 是该表的主键列(具有唯一值的列)。 该表的每一行表示部门ID和部门名。公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的高收入者是指一个员工的工资在该部门的不同工资中排名前三。编写解决方案找出每个部门中收入高的员工。以任意顺序返回结果表。返回结果格式如下所示。示例 1:输入: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的工资最高 - 兰迪和乔都赚取第二高的独特的薪水 - 威尔的薪水是第三高的 在销售部: - 亨利的工资最高 - 山姆的薪水第二高 - 没有第三高的工资因为只有两名员工提示没有姓名、薪资和部门完全相同的员工。思路思路和184题大差不差修改窗口函数为dense_rank然后取出排序为1,2,3的数据即可出现问题无代码with new as( select *, dense_rank() over(partition by departmentId order by salary desc) as cnt from Employee ) select d.name as Department, n.name as Employee, salary as Salary from new as n join Department as d on n.departmentId d.id where cnt 1 or cnt 2 or cnt 3;

更多文章