SQL 이것저것

[MySQL] WINDOW FUNTION - RANK, LAG 등

pjw250 2024. 10. 16. 16:33

[SELECT 절에서 사용되는 윈도우 함수 기본 문법]

SELECT WINDOW_FUNTION () OVER (PARTITION BY CAL1 ORDER BY CAL2 ASC/DESC)
FROM TABLE

 

[특징]

- GROUP BY와 병행하여 사용할 수 없지만 서브쿼리에는 사용할 수 있다.

 

종류 특징 함수
순위 *** 같으면 같은 등수 부여 후 건너뛰고 순차적 번호 부여
1,1,3,4,4,6,7, ...
(ORDER BY 필수)
RANK()
순위 같으면 같은 등수 부여 후 순차적 번호 부여
1,1,2,2,3,3, ...
(ORDER BY 필수)
DENSE_RANK()
순위 *** 같아도 정렬 기준에 따라 연속된 번호 부여
1,2,3,4,5,6,7,8, ...
(ORDER BY 필수)
ROW_NUMBER()
집계 집계함수와 동일 SUM, MAX, MIN, AVG, COUNT
순서 PARTITION 한 것에서 ORDER BY를 했을 때
제일 먼저 뜨는 값을 호출
FIRST_VALUE(칼럼명)
순서 PARTITION 한 것에서 ORDER BY를 했을 때
제일 마지막 뜨는 값을 호출
LAST_VALUE(칼럼명)
순서 *** 지정 칼럼에서 이전 n 번째의 행 값 호출
(ORDER BY 필수)
LAG(칼럼, n) / n 기본 값 (1), 최대 (3)
순서 *** 지정 칼럼에서 다음 n 번째의 행 값 호출
(ORDER BY 필수)
LEAD(칼럼, n) / n 기본 값 (1), 최대 (3)
비율 (ORACLE 에서만) (ORDER BY 불가)
행의 값을 전체 합한 것에서의 해당 값의 비율 표현
RATIO_TO_REPORT(칼럼)
비율 *** 최소 값을 0 ~ 최대 값을 1로 두고 백분위 수 출력
(0.25, 0.98 등, 소숫 점)
(ORDER BY 필수)
PERCENT_RANK() OVER(ORDER BY())
비율 파티션/ORDER BY 별로 값들을 누적 백분율
행이 3개면 1/3으로 각각 표현
(ORDER BY 필수)
CUME_DIST() OVER(ORDER BY())
비율 파티션/ORDER BY 별 전체 건수를 계산한 값으로 n 등분한 결과
(ORDER BY 필수)
NTILE(n) OVER(ORDER BY())