DATA/데이터전처리

[SQL] Window 함수 사용법

김쿼카 2024. 11. 19. 22:16

윈도우 함수란?

행마다 계산한 값, 즉 행간의 관계에 대해 집계할 수 있는 함수 입니다.

 

SELECT WINDOW_FUNCTION(ARGUMENTS)
OVER ([PARTITION BY 컬럼] [ORDER BY 컬럼] [ROWS BETWEEN ...])
FROM 테이블명;

 

  • WINDOW_FUNCTION: 사용할 윈도우 함수를 지정
  • ARGUMENTS: 함수에 따라 0개 이상의 인수를 설정
  • PARTITION BY: 데이터를 소그룹으로 나누는 기준이 되는 컬럼을 지정
  • ORDER BY: 결과를 정렬할 기준이 되는 컬럼을 지정
  • ROWS BETWEEN: 윈도우 프레임을 설정하는 옵션으로, 어떤 행을 포함할지를 정의

 

 

 

주요 윈도우 함수 유형


순위 

RANK(): 동일한 값에 동일한 순위를 부여하며, 순위가 비어있지 않도록 합니다.
DENSE_RANK(): 동일한 값에 동일한 순위를 부여하지만, 순위가 비어있지 않습니다.
ROW_NUMBER(): 각 행에 대해 고유한 순위를 부여합니다.

SELECT JOB, ENAME, SAL,
RANK() OVER (ORDER BY SAL DESC) AS ALL_RANK,
RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) AS JOB_RANK
FROM EMP;

 

 

집계

SUM(), AVG(), MAX(), MIN(), COUNT(): 특정 파티션 내에서 집계 값을 계산합니다.

SELECT MGR, ENAME, SAL, SUM(SAL) OVER (PARTITION BY MGR) AS MGR_SUM
FROM EMP;

 

행 순서

FIRST_VALUE(), LAST_VALUE(), LAG(), LEAD(): 특정 기준에 따라 이전 또는 다음 행의 값을 가져옵니다.

SELECT ENAME, HIREDATE, SAL, LAG(SAL) OVER (ORDER BY HIREDATE) AS PREV_SAL
FROM EMP
WHERE JOB = 'SALESMAN';

 

비율 

CUME_DIST(), PERCENT_RANK(), NTILE(), RATIO_TO_REPORT(): 데이터의 비율이나 순위를 계산

SELECT ENAME, SAL, NTILE(4) OVER (ORDER BY SAL DESC) AS QUARTILE
FROM EMP;