컬럼과 컬럼간의 연산이 아닌, 행과 행간의 비교 또는 연산을 처리하기 위한 함수
데이터베이스를 사용한 온라인 분석 처리 용도로 사용하기 위해서 SQL에 추가된 기능으로 OLAP 함수로도 불림
서브쿼리에서도 사용가능하지만 함수 자체에서 중첩으로 사용할 수는 없다.
윈도우 함수 처리로 인해 결과 건수가 달라지지는 않음
윈도우 함수 | - 순위 함수, 집계 함수, 순서 함수, 비율 함수 |
OVER | - 윈도우 함수에는 OVER 키워드가 필수 |
PARTITION BY | - 전체를 여러 개의 그룹으로 구분하기 위한 기준을 정의 - GROUP BY 구문과 의미상으로 유사 |
ORDER BY | - 그룹 내에서 순서를 정의 |
WINDOWING 절 | - 그룹 내에서 윈도우 함수를 적용할 행의 범위를 정의 |
ROWS | - 물리적인 범위 (ROWS 기준) - 물리적 단위로 행 집합 지정 |
RANGE | - 문제의 조회 결과에서 동일한 레코드는 누적을 함께 계산하므로 RANGE 사용 - 논리적인 범위 (VALUE 기준) - 논리적 주소로 행 집합 지정 |
BETWEEN ~ AND | - 윈도우 시작, 끝 위치 지정 - 최초의 레코드 |
UNBOUNDED PRECEDING | - 윈도우 시작위치 = 첫 번째 행 - Start_Point만 들어갈 수 있음 - 파티션의 first row - 최초의 레코드 |
CURRENT ROW | - 현재의 레코드 - START_POINT, END_POINT 모두 사용 가능. |
값 PRECEDING | - 값 만큼 이전의 레코드 |
값 FOLLOWING | - 값 만큼 이후의 레코드 |
UNBOUNDED FOLLOWING | - 윈도우 시작위치 = 마지막 행 - End_Point에만 들어갈 수 있으며, 파티션의 last row |
CURRENT ROW | - 현재의 레코드 - START_POINT, END_POINT 모두 사용 가능. |
값 PRECEDING | - 이전의 레코드 |
값 FOLLOWING | - 이후의 레코드 |
직업별로 급여 누적 합계
SUM(SAL) OVER( PARTITION BY JOB BY DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )
-> 첫째 ROW부터 진행되는 현재 ROW까지 윈도우로 설정되었으므로 누적합계
직업별로 SAL이 누적되서 나옴 다음 직업군은 다시 누적합계 계산
직업별 전체 합계
SUM(SAL) OVER( PARTITION BY JOB ORDER BY EMPNO
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )
-> 첫째 ROW부터 마지막 ROW까지 윈도우 범위로 설정되었으므로
각 직업별의 SAL전체 합계가 출력됨
✔ FIRST_VALUE
✔ LAST_VALUE
✔ LAG
✔ LEAD
✔ RANK
✔ DENSE_RANK
✔ PERCENT_RANK
✔ ROW_NUMBER
✔ RATIO_TO_REPORT
✔ PERCENT_RANK
✔ CUME_DIST
✔ NTILE