[SQL] 분석함수 문법 LAG LEAD RANK ROW_NUMBER DENSE_RANK

1. 분석함수

 

– 특정 집합 내에서 결과 건수의 변화없이 해당 집합 안에서 합계 및 카운트 등을 계산 할 수 있는 함수이다.

 

1) 문법

select
C1 , 분석함수(C2, C3, …) over(PARTITION BY C4 ORDER BY C5)
from TABLE_NAME
;

 

– 사용하고자 하는 분석 함수를 쓰고 대상 컬럼을 기재 후 PARTITION BY에서 구하는 기준 컬럼을 쓰고 ORDER BY에서 정렬 컬럼을 기재한다.

 

2) 특정 컬럼의 순위 구하는 함수

 

– ROW_NUMBER() : 같은 순위가 있어도 무조건 순차적으로 순위를 매긴다. (1, 2, 3, 4, 5, …)

– RANK() : 같은 순위가 있으면 동일 순위로 매기고 그 다음 순위로 건너뛴다. (1, 1, 3, 4, …)

– DENSE_RANK() : 같은 순위가 있으면 동일 순위로 매기고 그 다음 순위를 건너 뛰지 않는다. (1, 1, 2, 3, …)


4) 특정 컬럼의 첫번째 값 혹은 마지막 값을 구하는 함수

 

– FIRST_VALUE()

 

– LAST_VALUE()

– RANGE BETWEEN UNBOUNDED PRECEDING (첫번째 로우부터) AND UNBOUNDED FOLLOWING (파티션의 마지막 로우까지) 추가한다.

 

– DEFAULT

RANGE BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW

5) 특정 컬럼의 이전(PREV) 행의 값 혹은 다음(NEXT) 행의 값을 구하는 함수

– LAG() : 이전 행의 값을 찾는다.

– LEAD() : 다음 행의 값을 찾는다.