[DB/SQLD] 윈도우 함수(Window Function)

1 분 소요

윈도우 함수

윈도우 함수는 행과 행 간의 관계를 정의하기 위해서 제공되는 함수. 윈도우 함수를 사용해 순위, 합계, 평균, 행 위치 등을 조작할 수 있다.

SELECT WINDOW_FUNCTION(ARGUMENTS)
        OVER(PARTITION BY 칼럼
                ORDER BY WINDOWING)
FROM 테이블명;

윈도우 함수 구조이다. arguments(인수)는 윈도우 함수에 따라서 0~N개의 인수를 결정한다. partition by는 전체 집합을 기준에 의해 소그룹으로 나눈다. order by는 어떤 항목에 대해 정렬한다. windowing은 행 기준의 범위를 정한다. rows는 물리적 결과의 행 수이고 range는 논리적인 값에 의한 범위이다.

windowing

구조 설명
ROWS 부분집합인 윈도우 크기를 물리적 단위로 행의 집합을 지정한다.
RANGE 논리적인 주소에 의해 행 집합을 지정한다.
BETWEENA~AND 윈도우의 시작과 끝의 위치를 지정한다.
UNBOUNDED PRECEDING 윈도우의 시작 위치가 첫번째 행임을 의미한다.
UNBOUNDED FOLLOWING 윈도우 마지막 위치가 마지막 행임을 의미한다.
CURRENT ROW 윈도우 시작 위치가 현재 행임을 의미한다.



순위함수(RANK Function)

윈도우 함수는 특정 항목과 파티션에 대해서 순위를 계산할 수 있는 함수를 제공한다.

순위 관련 윈도우 함수

순위 함수 설명
RANK 특정항목 및 파티션에 대해서 순위를 계산. 동일한 순위는 동일한 값이 부여.
DENSE_RANK 동일한 순위를 하나의 건수로 계산
ROW_NUMBER 동일한 순위에 대해서 고유한 순위를 부여



집계함수(AGGREGATE Function)

윈도우 함수를 제공한다.

집계함수 설명
SUM 파티션 별로 합계 계산
AVG 파티션 별로 평균 계산
COUNT 파티션 별로 행 수를 계산
MAX, MIN 파티션 별로 최댓값과 최솟값을 계산



행 순서 관련 함수

행 순서 관련 함수는 상위 행의 값을 하위에 출력하거나 하위 행의 값을 상위 행에 출력할 수 있다. 특정 위치의 행을 출력할 수 있다.

행 순서 관련 윈도우 함수

행 순서 설명
FIRST_VALUE 파티션에서 가장 처음에 나오는 값을 구한다. min함수를 사용해서 같은 결과를 구할 수 있다.
LAST_VALUE 파티션에서 가장 나중에 나오는 값을 구한다. max함수를 사용해서 같은 결과를 구할 수 있다.
LAG 이전 행을 가지고 온다.
LEAD 윈도우에서 특정 위치의 행을 가지고 온다. 기본값은 1이다.



비율 관련 함수

비율 관련 함수는 누적백분율, 순서별백분율, 파티션을 n분으로 분할한 결과 등을 조회할 수 있다.

비율 관련 윈도우 함수

비율 함수 설명
CUME_DIST 파티션 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율을 조회한다. 누적 분포상에 위치를 0~1사이의 값을 가진다.
PERCENT_RANK 파티션에서 제일 먼저 나온 것을 0으로 제일 늦게 나온 것을 1로 하여 값이 아닌 행의 순서별 백분율을 조회한다.
NTILE 파티션별로 전체 건수를 ARGUMENT 값으로 N등분한 결과를 조회한다.
RATIO_TO_REPORT 파티션 내에 전체 sum(칼럼)에 대한 행 별 칼럼값의 백분율을 소수점까지 조회한다.