每天一道SQL题之day09

博客围绕每天一道SQL题展开,以day09为例,题目是查找每个部门中薪资最高的员工。给出了相关表结构,包括员工表和部门表。题解部分未详细给出,解析中提到用子查询按部门ID分组,用函数找最高工资并去重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天一道SQL题

每天一道SQL题之day09


1、题目:

链接: 部门工资最高的员工

表:Employee

Column NameType
idint
namevarchar
salaryint
departmentIdint

在 SQL 中,id是此表的主键。
departmentId 是 Department 表中 id 的外键(在 Pandas 中称为 join key)。
此表的每一行都表示员工的 id、姓名和工资。它还包含他们所在部门的 id。

表:Department

Column NameType
idint
namevarchar

在 SQL 中,id 是此表的主键列。
此表的每一行都表示一个部门的 id 及其名称。

查找出每个部门中薪资最高的员工。
任意顺序 返回结果表。
查询结果格式如下例所示。

示例 1:

输入:
Employee 表:

idnamesalarydepartmentId
1Joe700001
2Jim900001
3Henry800002
4Sam600002
5Max900001

Department 表:

idname
1IT
2Sales

输出:

DepartmentEmployeeSalary
ITJim90000
SalesHenry80000
ITMax90000

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关键字去除重复的结果,得到每个部门的唯一最高工资组合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值