SQL 쿼리는 각 부서별로 급여 순위를 매기는 쿼리입니다. 각 부서 내에서 급여가 높은 직원 순으로 순위를 계산하고, 급여가 NULL인 직원은 마지막에 배치되도록 처리합니다.
SQL 부서의 급여 순위 NULL LAST :
SELECT
department,
employee_name,
salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC NULLS LAST) AS rank --설명 ●
FROM
employees;
- ROW_NUMBER(): 각 행에 고유한 순차적인 번호를 부여합니다. 동점이 있더라도 건너뛰지 않고 순차적으로 번호를 매깁니다.
- OVER: 이 함수가 윈도우 함수임을 나타내며, PARTITION BY와 ORDER BY 절을 통해 계산 방식을 지정합니다.
- PARTITION BY department: department별로 데이터를 그룹화합니다. 즉, 각 부서별로 ROW_NUMBER()가 별도로 계산됩니다.
- ORDER BY salary DESC: salary를 기준으로 내림차순 정렬합니다. 즉, 급여가 높은 순서대로 번호를 매깁니다.
- NULLS LAST: NULL 값이 있는 경우, 정렬 시 NULL을 마지막에 배치하도록 합니다. 이는 salary가 NULL인 경우 해당 행이 가장 낮은 순위(가장 나중에)로 처리되도록 합니다.
예시 데이터
| HR | John | 4000 |
| HR | Alice | 3500 |
| HR | Bob | NULL |
| IT | Charlie | 5000 |
| IT | Eve | 4500 |
| IT | David | 6000 |
실행 결과
| HR | John | 4000 | 1 |
| HR | Alice | 3500 | 2 |
| HR | Bob | NULL | 3 |
| IT | David | 6000 | 1 |
| IT | Charlie | 5000 | 2 |
| IT | Eve | 4500 | 3 |