SQL을 배운 지 꽤 됐는데 Window function은 들어본 적만 있고 사실 잘 모르는 상태였다. Redshift를 기준으로 내가 자주 쓸 것 같은 Window function만 정리했다. 왜 배워야 하느냐고 한다면 학습 비용보다 학습 후 분석의 용이성이 더 크기때문이라 생각한다. 더 자세한 내용이 궁금하신 분은 이쪽으로. 설명도 잘 되어 있다.
Window Function :
행과 행간의 관계를 쉽게 정의하기 위해 만든 함수가 바로 WINDOW FUNCTION이다.
윈도우 함수를 활용하면 복잡한 프로그램을 하나의 SQL 문장으로 쉽게 해결할 수 있다.
분석 함수(ANALYTIC FUNCTION)나 순위 함수(RANK FUNCTION)로도 알려져 있는 윈도우 함수 (ANSI/ISOSQL 표준은 WINDOW FUNCTION이란 용어를 사용함)는 데이터웨어하우스에서 발전한 기능이다.
출처 : 구루비의 지식창고
설명이 좀 짧은데 더 자세한 설명이 필요하면 Amazon Redshift에서의 Window function에 대한 설명을 봐도 좋을 것 같다. 굳이 Amazon Redshift를 고른 이유는 내가 Redshift를 사용하고 있어서이지 다른 이유는 없다.
사용은
WINDOW_FUNCTION (ARGUMENTS) OVER ( [PARTITION BY 칼럼]] [ORDER BY 절] [WINDOWING 절] )
이런 식이기 때문에 어렵지 않다.
[Window function list] (내가 자주 쓸 것 같은 것만 임의로 추출한 것)
CUME_DIST 누적 비중
RANK 순위
DENSE_RANK RANK이지만 동일한 순위값이 있어도 다음 값이 바로 나옴
FIRST_VALUES 가장 큰 값에 해당하는 값에 지정된 표현식
LAST_VALUES 가장 작은 값에 해당하는 값에 지정된 표현식
LAG 그 이전 값을 출력
LEAD 그 이후의 값을 출력
LISTAGG 출력될 값을 그룹으로 묶어서 출력
MAX 해당 셀에서까지의 최대값 출력
MEDIAN 해당 셀에서까지의 중간값 출력
MIN 해당 셀에서까지의 최소값 출력
NTH_VALUE n번째 값을 출력
NTILE n개로 그룹을 나눔
PERCENT_RANK (x - 1) / (the number of rows in the window or partition - 1)
RATIO_TO_REPORT value of ratio_expression. argument for the current row / sum of ratio_expression. argument for the window or partition
ROW_NUMBER 몇 번째 행인지를 출력
STDDEV_SAMP/STDDEV_POP 모집단, 샘플의 표준편차
VAR_SAMP, VAR_POP 모집단, 샘플의 분산