728x90
https://leetcode.com/problems/department-highest-salary/
DENSE RANK() 를 사용하여 출력하기
우선 DENSE RANK()와 RANK()의 차이점
output을 기준으로 보면, 다음과 같이 Salay가 내림차순으로 정렬이 되어 있다.
- RANK() 함수 : Max 1위, Randy와 Joe 2위, 그리고 Will 4위
- DENSE_RANK() 함수 : MAX 1위, Randy와 Joe 2위, WIll 3위
어떻게 쿼리 조건에 따라 RNAK()함수가 필요할수도, DENSE_RANK()가 필요할 수도 있다. 이 경우는 DENCE_RANK()를 사용하여 각 팀에서 3위를 뽑아내는 것이 문제였다.
SELECT D.Name AS Department
, E.Name AS Employee
, E.Salary
FROM (SELECT DepartmentId
, Name
, Salary
, DENSE_RANK() OVER (PARTITION BY DepartmentId ORDER BY Salary DESC) AS RANK
FROM Employee ) E
INNER JOIN Department AS D ON D.id = E.DepartmentId
WHERE E.RANK <=3
* INNER JOIN은 서브쿼리에서 실행해도 된다
DENSE_RANK() 문법
DENSE_RANK() OVER (PARTITION BY 컬럼명 ORDER BY 컬럼명 DESC/ASC) AS RANK
728x90
'공부하는삶 > SQL' 카테고리의 다른 글
Department highest salary (0) | 2020.08.23 |
---|---|
Consecutive Numbers - 연속된 숫자 찾기 (0) | 2020.08.17 |
Hackerank - The REPORT / BETWEEN 범위 조건 조인하기 (0) | 2020.08.17 |