思路一:“你”比“我”大的数量是多少方法
e1=e2=employees,找出排名前三的,也就是“你”比“我”大的数据条数小于3,记住不能是小于等于,因为等于的话意味着在“我”前面有三个人,那我不就第四名了。
![](https://img.haomeiwen.com/i11733462/b150ce6069e7ae64.png)
select d.Name Department,e1.Name Employee,e1.Salary Salary
from Employee e1
join Department d on e1.DepartmentID=d.Id
where 3 > (
select count(distinct e2.Salary)
from Employee e2
where e2.Salary > e1.Salary and e1.DepartmentID=e2.DepartmentID
);
需要提出的是: 子查询中的 select count(distinct e2.Salary)
语句就是实现 dense_rank()
的效果
思路二:开窗函数先排序
这个题解参考的是排名第四的解析
select d.Department, new_e.Name Employee,new_e.Salary
from (select DepartmentID,Name,dense_rank() over(partition by DepartmentId order by Salary desc) ranking) new_e
join Department d on new_e.DepartmentID=d.Name
where new_e.ranking in (1,2,3)
group by d.ID;
网友评论