每天一道SQL题
每天一道SQL题之day09
1、题目:
链接: 部门工资最高的员工
表:Employee
Column Name | Type |
---|---|
id | int |
name | varchar |
salary | int |
departmentId | int |
在 SQL 中,id是此表的主键。
departmentId 是 Department 表中 id 的外键(在 Pandas 中称为 join key)。
此表的每一行都表示员工的 id、姓名和工资。它还包含他们所在部门的 id。
表:Department
Column Name | Type |
---|---|
id | int |
name | varchar |
在 SQL 中,id 是此表的主键列。
此表的每一行都表示一个部门的 id 及其名称。
查找出每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
查询结果格式如下例所示。
示例 1:
输入:
Employee 表:
id | name | salary | departmentId |
---|---|---|---|
1 | Joe | 70000 | 1 |
2 | Jim | 90000 | 1 |
3 | Henry | 80000 | 2 |
4 | Sam | 60000 | 2 |
5 | Max | 90000 | 1 |
Department 表:
id | name |
---|---|
1 | IT |
2 | Sales |
输出:
Department | Employee | Salary |
---|---|---|
IT | Jim | 90000 |
Sales | Henry | 80000 |
IT | Max | 90000 |
2、题解
select d.name as Department,e.name as Employee ,e.salary as Salary from
Employee e
left join
Department d
on e.departmentId = d.id
where (e.departmentId,e.salary) in (select distinct departmentId,max(salary) from Employee
group by departmentId)
3、解析
(e.departmentId, e.salary) in (select distinct departmentId, max(salary) from Employee group by departmentId)
这一部分是一个子查询,它的作用是找到每个部门的最高工资。
子查询中,首先使用GROUP BY
子句按照部门ID进行分组,然后使用MAX
函数找到每个部门的最高工资。最后,通过DISTINCT
关键字去除重复的结果,得到每个部门的唯一最高工资组合。