[DB/SQLD] 윈도우 함수(Window Function)
윈도우 함수
윈도우 함수는 행과 행 간의 관계를 정의하기 위해서 제공되는 함수. 윈도우 함수를 사용해 순위, 합계, 평균, 행 위치 등을 조작할 수 있다.
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(칼럼)에 대한 행 별 칼럼값의 백분율을 소수점까지 조회한다. |