[SQL] ROW_NUMBER()

bamboocoding·2024년 8월 13일

<테이블 EMP>

SELECT EMP_ID, SALARY, DEPT_ID
, ROW_NUMBER() OVER(PARTITION BY DEPT_ID ORDER BY SALARY DESC) AS COL1 
FROM EMP;

ROW_NUMBER()는 결과 집합에서 각 행에 고유한 번호를 할당한다.
부서 ID별로 구간을 나누고 이를 연봉 순으로 내림차순으로 정렬한다.

SELECT EMP_ID, SALARY, DEPT_ID
, SUM(SALARY) OVER(PARTITION BY DEPT_ID ORDER BY EMP_ID
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS COL2 
FROM EMP;

SUM으로 부서별 연봉 누적 합계를 계산하는데 먼저 직원 번호를 오름차순으로 정렬 후 합계를 계산하게 된다.
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
이는 윈도우 함수(여기서는 SUM)가 적용되는 범위를 지정한다.
UNBOUNDED PRECEDING : 첫 번째 행부터 시작한다
CURRENT ROW : 현재의 행
즉, 현재 행을 포함한 이전 행까지 함수의 범위를 지정한다.

참고로 여기서는 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW를 지워도 결과는 같다.

SELECT EMP_ID, SALARY, DEPT_ID
, MAX(SALARY) OVER(ORDER BY SALARY DESC ROWS CURRENT ROW) COL3 
FROM EMP;

MAX(SALARY)는 주어진 범위에서 연봉의 최대값을 구한다.
연봉을 내림차순으로 정렬하고 ROWS CURRENT ROW로 현재 행을 기준으로 최대값을 구한다.

profile
배운 것을 기록하는 습관을 길들이자.

0개의 댓글