문제
https://leetcode.com/problems/department-top-three-salaries

설명
부서별 상위 3개의 급여를 구한 후, 해당 급여를 가진 직원 정보를 출력하는 문제이다.
윈도우 함수를 이용하면, 원하는 컬럼을 기준으로 구분한 뒤, 순위를 정할 수 있다.
또한, DENSE_RANK는 RANK와는 다르게 중복된 값이 있으면 포함하고 다음 순위를 건너뛰지 않고 순위를 매긴다.
ROW_RANK는 중복된 값이 있으면 동률이 아닌 다른 순위를 매긴다.
📌 윈도우 함수 생김새
함수(컬럼1) OVER (Partition by 컬럼2 Order by 컬럼3)
- 컬럼 2에 따라 나눈 후, 컬럼 3을 기준으로 순위를 정한다. 또한, LAG, LEAD 등의 함수는 컬럼 1을 기준으로 직전, 직후 컬럼을 구한다.
- group by 와는 다르게, 행의 수가 그대로 유지되므로 행과 행 간의 관계를 편하게 다룰 수 있다.
구현
# Write your MySQL query statement below
with SALARY_RANK as
(
select e.departmentId as departmentId, name, salary, DENSE_RANK() OVER (PARTITION BY e.departmentId ORDER BY salary desc) as salary_rank
from Employee e
)
select d.name as Department, sr.name as Employee, sr.salary as Salary
from SALARY_RANK sr join Department d on sr.departmentId = d.id
where sr.salary_rank <= 3;'Coding > SQL' 카테고리의 다른 글
| [LeetCode-SQL 50] 1667. Fix Names in a Table (0) | 2025.03.08 |
|---|---|
| [프로그래머스-SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (1) | 2025.03.06 |
| [LeetCode-SQL 50] 585. Investments in 2016 (0) | 2025.03.03 |
| [LeetCode-SQL 50] 602. Friend Requests II: Who Has the Most Friends (0) | 2025.02.28 |
| [LeetCode-SQL 50] 1321. Restaurant Growth (0) | 2025.02.27 |