| 구분 | 함수 |
|---|---|
| 순위 함수 | RANK, DENSE_RANK, ROW_NUMBER |
| 집계 함수 | SUM, MAX, MIN, AVG, COUNT |
| 순서 함수 | FIRST_VALUE, LAST_VALUE, LAG, LEAD |
| 그룹 내 비율함수 | RATIO_TO_REPROT, PERCENT_RANK, CUME_DIST, NTILE |
| 통계 분석함수 | CORR, COVAR_POP, COVAR_SAMP, STDDEV, STDDEV_POP, STDDEV_SAMP, VARIANCE, VAR_POP, VAR_SAMP |
✍ 윈도우 함수 표를 보게 되면 그 동안 블로그에 작성했었던 순위함수, 집계함수, 순서함수, 비율함수, 분석함수를 볼 수 있다. over() 절의 여부에 따라 윈도우 함수로 사용하는지 아닌지 알 수 있다. 이 글에서는 앞서 봤었던 함수를 이용해서 윈도우 절을 활용하여 함수를 사용하는 방법을 알아보겠다.
✍ ROWS : 조회된 데이터를 물리적 위치(ROWNUM)로 구분하여 모든 행이 1개의 행으로 인식
✍ RANGE: ORDER BY 절에 명시된 칼럼으로 논리적인 행 집합을 구성하며, 집합으로 묶인 그룹을 1개의 행으로 인식
{ ROW | RANGE }
{ BETWEEN {
UNBOUNDED PRECEDING
| CURRENT ROW
| value_expr { PRECEDING | FOLLOWING }
}
AND {
UNBOUNDED FOLLOWING
| CURRENT ROW
| value_expr { PRECEDING | FOLLOWING }
}
| { UNBOUNDED PRECEDING
| CURRENT ROW
| value_expr PRECEDING
}
BETWEEN A AND B
A) 시작점 정의
CURRENT ROW : 현재행부터
UNBOUNDED PRECEDING : 처음부터(DEFAULT)
N PRECEDING : N 이전부터
B) 마지막 시점 정의
CURRENT ROW : 현재행까지(DEFAULT)
UNBOUNDED FOLLOWING : 마지막까지
N FOLLOWING : N 이후까지
SELECT EMPLOYEE_ID,
FIRST_VALUE(SALARY) OVER (ORDER BY SALARY
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) LOWER_SAL,
SALARY MY_SAL,
LAST_VALUE(SALARY) OVER (ORDER BY SALARY
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) HIGHER_SAL
FROM EMPLOYEES;
SELECT DEPARTMENT_ID, FIRST_NAME, SALARY,
SUM(salary) OVER(PARTITION BY DEPARTMENT_ID
ORDER BY SALARY
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS sum_rows
FROM EMPLOYEES;
인프런 오라클 데이터베이스 강의
https://tychejin.tistory.com/209
https://for-my-wealthy-life.tistory.com/48