03 | 분석 함수와 window 함수
분석 함수AnalyticFunction 란 테이블에 있는 로우에 대해 특정 그룹별로 집계 값을 산출할 때 사용된다. 집계 값을 구할 때 보통은 그룹 쿼리를 사용하는데, 이때 GROUP BY 절에 의해 최종 쿼리 결과는 그룹별로 로우 수가 줄어든다. 이에 반해, 집계 함수를 사용하면 로우의 손실 없이도 그룹별 집계 값을 산출해 낼 수 있다. 분석 함수에서 사용하는 로우별 그룹을 윈도우(window)라고 부르는데, 이는 집계 값 계산을 위한 로우의 범위를 결정하는 역할을 한다.
그럼 지금부터 분석 함수에 대해 자세히 알아보자. 분석 함수 구문은 다음과 같다.
분석 함수(매개변수) OVER
(PARTITION BY expr1, expr2,...
ORDER BY expr3, expr4...
window 절)
• 분석 함수: 분석 함수 역시 특정 그룹별 집계를 담당하므로 집계 함수에 속한다. 분석 함수 용도로 사용할 수 있는 함수에는 AVG, SUM MAX, MIN, COUNT, CUM_DIST, DENSE_RANK, PERCENT_RANK, FRIST, LAST, LAG, LEAD, ROW_NUMBER 등이 있다.
• PARTITION BY 절: 분석 함수로 계산될 대상 로우의 그룹(파티션)을 지정한다.
• ORDER BY 절: 파티션 안에서의 순서를 지정한다.
• WINDOW 절: 파티션으로 분할된 그룹에 대해서 더 상세한 그룹으로 분할할 때 사용된다. WINDOW 절과 함께 쓸 수 있는 분석 함수에는 AVG, CORR, COUNT, COVAR_POP, COVAR_SAMP, FIRST_VALUE, LAST_VALUE, MAX, MIN, NTH_VALUE, STDDEV 등이 있다.
분석 함수 구문은 크게 두 가지로 나눌 수 있다. 하나는 분석 함수이며 다른 하나는 OVER 키워드 뒤에 위치한 분석 함수 절이다. 분석 함수 절은 다시 PARTITION BY, ORDER BY, window 절로 나눌 수 있다. window 절 구문은 다시 여러 종류로 나뉘므로 자세한 내용은 예제를 통해 살펴볼 것이다. 먼저 대표적인 분석 함수에는 어떤 것들이 있는지 알아 보자.