learning/SQL
[LeetCode185] Department Top Three Salaries
유자유자
2023. 1. 21. 17:26
연봉 정보 테이블과 부서 정보 테이블을 병합하여 부서별 unique한 값으로 top3 연봉 받는 사람을 나타내보자.
테이블 병합까지는 쉬운데 부서별 top 3를 어떻게 나타낼 것인가.
우선 연봉에 순위를 매긴다. 같은 값에 대해 같은 순위를 부여하고 그 외 순차적인 값을 매기는 dense_rank 를 사용한다. 연봉 높은 순이므로 over 뒤에는 order by salary desc 가 들어가야 한다.
두번째로 부서별 정보를 넣는다. partition by 를 이용하면 그룹별 집계를 쉽게 할 수 있다.
select Department, Employee, Salary
from (select d.name as Department,
e.name as Employee,
e.salary as Salary,
dense_rank() over (partition by d.name order by e.salary desc) as de_rank
from employee as e
join department as d
on e.departmentid=d.id) as t
where t.de_rank < 4 ;