[Oracle] 오라클 WINDOW FUNCTION/윈도우 함수 란?
Oracle

[Oracle] 오라클 WINDOW FUNCTION/윈도우 함수 란?

Window 함수는?

- 기존 RDBMS(관계형 데이터베이스)는 컬럼과 컬럼간의 연산, 비교, 연결이나 집압에 대한 집게는 쉬운 반면, 행과 행간의 관계를 정의하거나 비교, 연산한는 것은 하나의 쿼리문으로 처리하기 굉장히 어려웠다. 하지만, 윈도우 함수를 이용한다면 행과 행간의 관계를 쉽게 정의할 수 있다. 

 

- 윈도우 함수(Window Function)은 분석 함수(Analytic Function)이나 순위 함수(Rank Function)으로도 알려져 있다. 또한, 문법상 OVER() 문구가 키워드로 꼭 들어가야 되기 때문에 OVER 함수로 할고 있는 사람도 있다. 즉, 윈도우 함수 = 분석 함수 = 순위 함수 = 오버절 모두 같은 뜻이지만 사용하는 단어만 다를 뿐이다. 

 

- 다른 함수들처럼 중첩해서 사용하지는 못하지만, 서브쿼리에서는 사용할 수 있다. 

 

- 다른 RDBMS에서도 사용되는 함수이지만, 각 RDBMS 별 지원하는 함수가 약간씩 다르다.

 

- 개인적인 의견으로 R, Pandas와 같은 분석 언어를 사용할 수 있다면, SQL로 굳이 행간 비교를 해야하나? 라는 생각이 든다. 

 

WINDOW FUCTION Syntax(문법)
-- WINDOW 함수에는 OVER 문구가 키워드로 필수 포함된다.

SELECT WINDOW_FUNCTION (ARGUMENTS) OVER ([PARTITION BY 칼럼][ORDER BY 절][WINDOWING 절])
FROM 테이블;

- WINDOW_FUNCTION : 기존에 사용하던 함수도 있고, 새롭게 WINDOW 함수용으로 추가된 함수도 있다.

- ARGUMENTS (인수) : 함수에 따라 0 ~ N개의 인수가 지정될 수 있다.

- PARTITION BY 절 : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있다.

- ORDER BY 절 : 어떤 항목에 대해 순위를 지정할 지 ORDER BY 절을 기술한다.

- WINDOWING 절 : WINDOWING 절은 함수의 대상이 되는 행 기준의 범위를 지정할 수 있다. ROWS는 물리적인 결과 행의 수를, RANGE는 논리적인 값에 의한 범위를 나타내는데, 둘 중의 하나를 선택해서 사용할 수 있다. (다만, WINDOWING 절은 SQL Server에서는 지원하지 않는다.)

 

WINDOW/ANALYTIC 함수 종류
구분 종류
순위(RANK) 관련 RANK, DENSE_RANK, ROW_NUMBER
집계(AGGREGATE) 관련 SUM, MAX, MIN, AVG, COUNT
순서 관련 함수 FIRST_VALUE, LAST_VALUE, LAG, LEAD
그룹 내 비율 관련 함수 CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
선형분석을 포함한 통계분석 함수  CORR, COVAR_POP, COVAR_SAMP, STDDEV, STDDEV_POP, STDDEV_SAMP, VARIANCE, VAR_POP, VAR_SAMP, REGR_(LINEAR REGRESSION), REGR_SLOPE, REGR_INTERCEPT, REGR_COUNT, REGR_R2, REGR_AVGX, REGR_AVGY, REGR_SXX, REGR_SYY, REGR_SXY