출처 : http://blog.naver.com/genezerg?Redirect=Log&logNo=20142202559
분석함수중에서 윈도우절(WINDOW절)을 사용할수 있는 함수를 윈도우함수라고 한다.
고로 분석함수중에서 일부만 윈도우절을 사용할수 있다는것이다.
PARTITION BY 절에 의해 명시된 그룹을 다시 그룹핑할수 있다.
윈도우 함수 종류
- AVG, COUNT, FIRST_VALUE, LAST_VALUE, MAX, MIN, STDDEV, SUM...
문법 > SUM(컬럼명) OVER(PARTITION BY [컬럼] ORDER BY [컬럼] [ASC/DESC]
ROWS / RANGE BETWEEN UNBOUNDED PRECEDING / PRECEDING / CURRENT ROW
AND UNBOUNDED FOLLOWING / CURRENT ROW)
ROW : 부분집합인 윈도우 크기를 물리적인 단위로 행 집합을 지정
RANGE : 논리적인 주소에 의해 행 집합을 지정
UNBOUNDED PRECEDING : 윈도우의 시작 위치가 첫번째 ROW
UNBOUNDED FOLLOWING : 윈도우의 마지막 위치가 마지막 ROW
CURRENT ROW : 윈도우의 시작 위치가 현재 ROW
예 > SELECT JOB, SAL
,SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) SAL1
,SAL
,SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) SAL2
,SAL
,SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) SAL3
FROM EMP
WHERE JOB = 'MANAGER'
SAL1 : 첫째ROW부터 마지막ROW까지 윈도우로 설정되었으므로 전체합계
SAL2 : 첫째ROW부터 현재ROW까지 윈도우로 설정되었으므로 누적합계
SAL3 : 현재ROW부터 마지막ROW까지 설정되었으으로 누적합계의 반대개념
SELECT JOB, SAL
,SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) SAL1
,SAL
,SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) SAL2
,SAL
,SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) SAL3
FROM EMP
WHERE JOB = 'MANAGER'
SAL1 : 현재ROW중심으로 이전과 다음ROW의 합계
SAL2 : 이전ROW와 현재ROW의 합계
SAL3 : 현재ROW와 다음ROW의 합계