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

在这里插入图片描述在这里插入图片描述

select b.name as Department, a.name as Employee, a.Salary
from(
	select a.*, @rank:=case when @department=DepartmentId and @salary<>salary then @rank+1
	                        when @department=DepartmentId and @salary=salary then @rank
	                        else 1 end as rank,
	            @department:=DepartmentId,
	            @salary:=Salary
	from Employee as a, (select @rank:=0, @department:=0, @salary:=0) as b
	order by DepartmentId, Salary desc
	) as a
join Department as b on a.DepartmentId=b.Id
where a.rank<=3

###方法二

select c.Name as Department, a.Name as Employee, a.Salary
from Employee as a
join Employee as b on a.DepartmentId=b.DepartmentId and a.Salary<=b.Salary
join Department as c on a.DepartmentId=c.Id
group by a.Id #计算工资大于等于每个ID的数量
having count(distinct b.Salary)<=3 #因为a.Salary<=b.Salary,所以b.Salary的数量就是a中每个ID的排名
order by a.DepartmentId, a.Salary desc

如有错误,欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值