跳到主要内容

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

序号题目难度
185题目链接困难

题目大意​

公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。

编写解决方案,找出每个部门中 收入高的员工 。

以 任意顺序 返回结果表。

表: Employee

Column NameType
idint
namevarchar
salaryint
departmentIdint

id 是该表的主键列(具有唯一值的列)。 departmentId 是 Department 表中 ID 的外键(reference 列)。 该表的每一行都表示员工的ID、姓名和工资。它还包含了他们部门的ID。

表: Department

Column NameType
idint
namevarchar

id 是该表的主键列(具有唯一值的列)。 该表的每一行表示部门ID和部门名。

示例​

输入​

Employee 表:

idnamesalarydepartmentId
1Joe850001
2Henry800002
3Sam600002
4Max900001
5Janet690001
6Randy850001
7Will700001

Department 表:

idname
1IT
2Sales

输出​

DepartmentEmployeeSalary
ITMax90000
ITJoe85000
ITRandy85000
ITWill70000
SalesHenry80000
SalesSam60000

解释: 在IT部门:

  • Max的工资最高
  • 兰迪和乔都赚取第二高的独特的薪水
  • 威尔的薪水是第三高的

在销售部:

  • 亨利的工资最高
  • 山姆的薪水第二高
  • 没有第三高的工资,因为只有两名员工

提示​

没有姓名、薪资和部门 完全 相同的员工。

参考答案​

with q1 as(
select
t2.name as `Department`
,t1.name as `Employee`
,t1.Salary
,dense_rank() over(partition by DepartmentId order by salary desc) as rk
from employee as t1
join department as t2
on t1.DepartmentId = t2.Id
)
select
Department
,Employee
,Salary
from q1
where rk < 4
order by department ,salary desc
;