우노
[Window Function] LeetCode 185번 “Department Top Three Salaries” 풀이 본문
SQL/Window Function
[Window Function] LeetCode 185번 “Department Top Three Salaries” 풀이
운호(Noah) 2022. 12. 11. 20:47문제 링크
풀이
부서 별 급여 3순위에 드는 사원들을 출력하면 되는 문제입니다.
Window Function의 DENSE_RANK와 JOIN을 사용해 해결할 수 있습니다.
DENSE_RANK()는, 동일값인 경우엔 동일 순위를 부여하고, 이후 순위를 연이어서 부여하는 기능입니다.
- 1 2 2 3
먼저, 아래와 같은 서브쿼리를 작성합니다.
SELECT id, name, salary, departmentId, DENSE_RANK() OVER(PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank FROM Employee
| id | name | salary | departmentId | salary_rank | | -- | ----- | ------ | ------------ | ----------- | | 4 | Max | 90000 | 1 | 1 | | 1 | Joe | 85000 | 1 | 2 | | 6 | Randy | 85000 | 1 | 2 | | 7 | Will | 70000 | 1 | 3 | | 5 | Janet | 69000 | 1 | 4 | | 2 | Henry | 80000 | 2 | 1 | | 3 | Sam | 60000 | 2 | 2 |
이후, 해당 서브쿼리 테이블과 Department를 JOIN한 뒤,
WHERE을 통해 salary_rank가 3 이하인 데이터들을 걸러내면 됩니다.
전체 쿼리는 아래와 같습니다.
전체 쿼리
SELECT D.name AS Department, SUB.name AS Employee, SUB.salary AS Salary
FROM (
SELECT id, name, salary, departmentId,
DENSE_RANK() OVER(PARTITION BY departmentId ORDER BY salary DESC) AS salary_rank
FROM Employee) SUB
JOIN Department AS D
ON SUB.departmentId = D.id
WHERE SUB.salary_rank <= 3
'SQL > Window Function' 카테고리의 다른 글
[Window Function] LeetCode 178번 “Rank Scores” 풀이 (0) | 2022.12.12 |
---|---|
[Window Function] LeetCode 184번 “Department Highest Salary” 풀이 (0) | 2022.12.11 |
[Window Function] LeetCode 180번 “Consecutive Numbers” 풀이 (0) | 2022.12.11 |
Comments