SELECT
WINDOW_FUNCTION(ARGUMENTS) OVER (
PARTITION BY 컬럼명
ORDER BY 정렬조건
WINDOWING clause
)
→ 적용할 함수와 OVER절은 윈도우 함수에서 필수적으로 사용되며, 어떤 결과를 만들지에 따라 PARTITION BY, ORDER BY, WINDOWING clause 사용
구조 | 설명 |
---|---|
ROWS | 부분집합인 윈도우 크기를 물리적 단위로 행의 집합을 지정 |
RANGE | 논리적 주소에 의해 행 집합을 지정 |
BETWEEN AND | 윈도우의 시작과 끝 위치를 지정 |
UNBOUNDED PRECEDING | 윈도우 시작 위치가 첫 번째 행임을 의미 |
UNBOUNDED FOLLOWING | 윈도우 마지막 위치가 마지막 행임을 의미 |
CURRENT ROW | 윈도우 시작 위치가 현재 행임을 의미 |
(데이터가 인출된 현재 행을 의미) |
SELECT EMPNO, ENAME, SAL
SUM(SAL) OVER(ORDER BY SAL
ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING) TOTSAL
FROM EMP;
→ UNBOUNDED PRECEDING: 처음 행을 의미
→ UNBOUNDED FOLLOWING: 마지막 행을 의미
→ TOTSAL의 처음부터 마지막까지의 합계(SUM(SAL))를 계산
SELECT EMPNO, ENAME, SAL
SUM(SAL) OVER(ORDER BY SAL
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW)TOTSAL
FROM EMP;
→ 처음부터 CURRENT ROW까지의 합계를 계산. 즉, 누적합계
→ 첫 번째 행의 값이 1이었으면 1, 두 번째 행의 값이 2였으면 1+2=3, 세 번째 행의 값이 3이었으면 1+2+3=4
GROUP BY | WINDOW FUNCTION | |
---|---|---|
기능 | 자르기+집약 | 자르기 |
특징 | 1. GROUP BY에 지정된 컬럼으로 데이터 자름 | 1. PARTITION BY에 지정된 컬럼으로 데이터 자름 |
2. 집계 함수를 이용해 집약 | ||
차이점 | 행의 수가 줄어듦 | 행의 수가 그대로 유지됨 |
windowing clause 사용 가능한 함수
ROWS 와 RANGE
ROWS specifies the window in physical units (rows).
RANGE specifies the window as a logical offset.
UNBOUNDED
PRECEDING, FOLLOWING
DEFAULT
예시
WITH SUNG AS (
SELECT '20080105' T_DATE , '김철수' S_NAME, '1학년1반' S_CLASS, '수학' SUBJECT, '92' SCORE FROM DUAL UNION ALL
SELECT '20080305', '김철수', '1학년1반', '수학', '95' FROM DUAL UNION ALL
SELECT '20080505', '김철수', '1학년1반', '수학', '94' FROM DUAL UNION ALL
SELECT '20080101', '박은혜', '1학년3반', '국어', '82' FROM DUAL UNION ALL
SELECT '20080201', '박은혜', '1학년3반', '국어', '85' FROM DUAL UNION ALL
SELECT '20080301', '박은혜', '1학년3반', '국어', '81' FROM DUAL UNION ALL
SELECT '20080201', '윤태영', '3학년1반', '물리', '63' FROM DUAL UNION ALL
SELECT '20080301', '윤태영', '3학년1반', '물리', '69' FROM DUAL UNION ALL
SELECT '20080401', '윤태영', '3학년1반', '물리', '52' FROM DUAL
)
SELECT t.*
, SCORE - MAX(SCORE) OVER(PARTITION BY S_CLASS, SUBJECT
ORDER BY T_DATE
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
) AS 점수등락
FROM SUNG t
``