Skip to content

윈도우 함수

SELECT문을 통한 작업을 하다보면 결과집합의 각 행과 행의 관계에서 다양한 연산처리를 해야할 떄가 있다. (누적합계, 누적비율, 누적등수 등)

이러한 연산처리를 할 수 있게 하는 것이 바로 윈도우 함수(Window Function)이다. 분석함수라고 불리기도 한다.

윈도우 함수의 종류

순위

함수명설명
RANK지정한 기준에 따라 순위를 구하고, 동일한 순위가 있다면 건너뛰고 다음 순위로 산출한다. (1, 2, 2, 4)
DENSE_RANK지정한 기준에 따라 순위를 구하고, 동일한 순위가 있다면 건너뛰지 않고 다음 순위로 산출한다. (1, 2, 2, 3)
ROW_NUMBER지정한 기준에 따라 순위를 구하고, 동일 순위가 있어도 무조건 순위를 산출한다. (1, 2, 3, ,4)

집계

함수명설명
SUM지정한 기준에 따라 합계를 구한다.
MAX지정한 기준에 따라 최댓값을 구한다.
MIN지정한 기준에 따라 최솟값을 구한다.
AVG지정한 기준에 따라 평균값을 구한다.
COUNT지정한 기준에 따라 갯수를 구한다.

행 순서

함수명설명
FIRST)VALUE지정한 기준에 따라 가장 먼저 나오는 값을 구한다.
LAST_VALUE지정한 기준에 따라 가장 나중에 나오는 값을 구한다.
LAG지정한 기준에 따라 이전값을 구한다.
LEAD지정한 기준에 따라 다음값을 구한다.

그룹 내 비율

함수명설명
CUME_DIST지정한 기준에 따라 누적 백분융을 구한다. 지속적으로 누적되다가 최종행은 1이 된다.
PERCENT_RANK지정한 기준에 따라 각 행의 순서별 백분율을 구한다. 제일 먼저 나오는 것을 0, 가장 늦게 나오는 것을 1로 한다.
NTILE지정한 기준에 따라 특정 값으로 N등분한 결과를 구한다.
RATIO_TO_REPORT지정한 기준에 따라 각 행이 차지하는 비율을 나타낸다.

윈도우 함수 문법

윈도우 함수는 SELECT 절에서 사용되며, 기본적인 문법은 아래와 같다.

SELECT
윈도우함수(인자) OVER(PARTITION BY 컬럼 ORDER BY 컬럼)
윈도우절(ROWS|RANGE BETWEEN
UNBOUND PRECEDING|CURRENT ROW
AND UNBOUND FOLLOWING|CURRENT ROW)
FROM 테이블명
;

인자는 윈도우 함수에 따라 객수가 달라질 수 있다.

OVER문 안의 PARTITION BY는 집계를 내는, 또는 등수를 매기는 컬럼을 그룹화하는 속성이고, ORDER BY는 정렬 기준을 기재하는 속성이다. 등수를 매기는 윈도우 함수의 경우 ORDER BY의 내용에 따라 등수를 매기는 기준이 정해진다.

윈도우절은 윈도우 함수가 연산을 처리하는 대상이 되는 행의 범위를 지정하는 절이다. 만약, 전체 결과집합의 연산을 하고싶다면 윈도우절을 사용하지 않아도 되지만, 특정 행의 범위를 지정하고 싶다면 윈도우 절 부분에 아래와 같이 작성해야한다.

ROWS BETWEEN A AND B 또는
RANGE BETWEEN A AND B