기본 개념
- 행과 행 간의 관계를 쉽게 정의하기 위하여 만든 함수
- 기본 문법
- over: 필수 포함, over 내부에 PARTITION BY 절과 ORDER BY 절이 들어감
- partition by: 전체 집합을 해당 기준에 소그룹으로 나눔
SELECT WINDOW_FUNCTION (ARGUMENTS) OVER([PARTITION BY 컬럼] [ORDER BY 컬럼] [WINDOWING 절])
FROM 테이블명;
- 종류

순위 함수
- RANK: order by를 포함한 쿼리문에서 특정 컬럼의 순위를 구하는 함수
- 중간 순위 비움
- DENSE_RANK: rank 작동법과 동일, 중간 순위 비우지 않음
- ex) 1,1,2,3,3,4
- row_number: 동일한 값이어도 고유한 순위를 부여
예제

순서 함수
-
LAG & LEAD
- lag: 현재 행보다 이전행을 가져옴
SELECT LAG([대상 컬럼], [이전 offset], [기본값]) OVER (PARTITION BY [..] ORDER BY [..])
예제

- lead: 다음행 조회
SELECT LEAD([대상 컬럼], [다음 offset], [기본값]) OVER (PARTITION BY [..] ORDER BY [..])
예제

-
FIRST_VALUE & LAST_VALUE
- FIRST_VALUE : 선택된 레코드들 중 특정한 컬럼을 기준으로 시작 값(처음 값)을 출력
- LAST_VALUE : 선택된 레코드들 중 특정 컬럼을 기준으로 마지막 레코드의 값(현재 레코드 또는 그룹/전체 중 마지막 값)을 출력
범위 지정
- 범위지정은 over() 안에서 [ RANGE / ROWS ] + BETWEEN 를 지정하여 할 수 있음
- 특정 물리적인 행에 대해서 범위를 지정하고 싶다면, ROWS + BETWEEN 을 사용함
- 논리적인 단위로 행의 범위를 지정하고 싶다면, RANGE + BETWEEN 을 사용함
ROWS : 물리적인 단위로 행 집합을 지정
RANGE : 논리적인 단위로 의해 행 집합을 지정
BETWEEN ~ AND : 윈도우의 시작과 끝 위치를 지정
UNBOUNDED PRECEDING : 윈도우 시작 위치가 첫 번째 로우임을 의미
UNBOUNDED FOLLOWING : 윈도우 마지막 위치가 마지막 로우임을 의미
[ROW수] PRECEDING : 윈도우 시작 위치가 ROW수만큼 이전이 시작 로우임을 의미
[ROW수] FOLLOWING : 윈도우 마지막 위치가 ROW수만큼 다음이 마지막 로우임을 의미
CURRENT ROW : 현재 로우까지를 의미
interval: 날짜 및 시간 값에 대한 연산을 수헹 할 때 사용되는 문법, interval을 사용하면 일,시간,분,초 등의 값을 날짜 및 값에 더하거나 빼는 등의 연산을 쉽게 수행 가능


비율 함수
- PERCENT_RANK()
- 동점을 고려하지 않고 임의의 행의 백분율 순위를 계산
- ( rank - 1 ) / ( total_rows - 1 )
- cume_dist()
- 동점을 고려하여 결과 집합 내 값의 누적 분포 계산