-
[Leet 185] Department Top Three SalariesLeet 2025. 1. 15. 19:52
랭킹을 알아서 계산해주는 함수가 있다는 것을 처음알았다.
근데 이거 알면 진짜 알짜배기로 유용하게 잘 쓸 수 있을듯?
DENSE_RANK를 통해 salary를 기준으로 랭킹을 매기고
PARTITION을 통해 각 부서별로 랭킹을 매길 수 있게 한다
그 이후 각 부서별 상위 3개의 top salaries만 뽑아야하므로
JOIN 후 WHERE 절에서 범위에 맞게 추출해주면 된다
CTE를 사용할때 바로 WHERE 절로 추출을 못한다고 한다.
그 이유는 다음과 같다.
- salary_ranking은 DENSE_RANK() 윈도우 함수의 결과입니다.
- 하지만 윈도우 함수는 SELECT 절에서 계산되기 때문에 WHERE 절에서 바로 필터링할 수 없습니다.
- 즉, WHERE salary_ranking <= 3 조건이 실행될 때 salary_ranking이 아직 존재하지 않는 상태라 오류가 발생합니다.
WITH temp AS ( SELECT name, DENSE_RANK() OVER(PARTITION BY departmentId ORDER BY salary DESC) AS salary_ranking, salary, departmentId FROM Employee AS emp ) SELECT dept.name AS Department, temp.name AS Employee, temp.salary FROM temp JOIN department AS dept ON temp.departmentId = dept.id WHERE temp.salary_ranking <= 3https://leetcode.com/problems/department-top-three-salaries/description/
'Leet' 카테고리의 다른 글
[Leet 1934] Confirmation Rate (1) 2025.01.31 [Leet 1193] Monthly Transactions 1 (0) 2025.01.31 [Leet 585] Investments in 2016 (1) 2025.01.31 [Leet 262] Trips and Users (1) 2025.01.15