部门工资前三高的员工的信息

1 篇文章 0 订阅
1 篇文章 0 订阅

最近去面试,被问到一个sql题,当场被摁住了命运的喉咙,思考良久,无奈说出不会二字,不用多说,面试肯定凉凉,回去之后,小菜鸟痛定思痛,决定恶补sql,在leetcode上正巧又碰到类似的问题,于是打算记录一下。

求部门工资前三高的员工的信息

有两张表,一张是department表,一张是employee表
employee表
在这里插入图片描述
department表
在这里插入图片描述
现在的问题是,求出部门工资前三高的员工的信息,包括部门名称,员工名,员工工资三个字段。注意:同一部门下的员工薪水相同则排名相同,如表中的joe和randy,两人的排名应该都为第二名

我们可以将问题分解,首先查找出同一部门下薪水前三高的员工
这里使用的是子查询

select e1.* from employee e1 
where (select count(DISTINCT e2.salary) from employee e2
where e1.salary<e2.salary and e1.department_id=e2.department_id)<3;

其中count(字段名)表示返回该字段总共有多少条记录,distinct表示去重,
得到的结果为
在这里插入图片描述
之后在关联部门表,并根据部门名称和员工工资进行降序排序。

select d.name as department,e1.name as employee,e1.salary as salary 
from employee e1 join department d on d.id=e1.department_id
where (select count(DISTINCT e2.salary) from employee e2 
where e1.salary<e2.salary and e1.department_id=e2.department_id)<3 
order by d.name,e1.salary desc;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值