DATABASE(SQL)
[Oracle] WINDOWING 절, ROW, RANGE
매료매료
2023. 11. 23. 16:53
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -- 첫번째행 ~ 현재행
ROWS BETWEEN 4 PRECEDING AND CURRENT ROW -- 이전 행 4개 ~ 현재행
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING -- 첫번째 행 ~ 이전행 1번째
RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING -- 동작X
ROWS BETWEEN UNBOUNDED PRECEDING AND (CURRENT ROW - 1) -- 동작X
[WINDOW 함수]
- 행과 행 간의 관계를 정의하고, 행과 행을 비교, 연산하는 것을 도와주는 함수
SELECT
...
SUM( -- sum 대신 avg 가 들어갈 수 있다.
...
) OVER (
[PARTITION BY 컬럼]
, [ORDER BY 절]
, [WINDOWING 절]
)
FROM 테이블명;
[WINDOWING절]
- ROWS
> 개별 행(row)을 기준으로 범위를 지정
- RANGE
> 행이 가지고 있는 값을 기준으로 범위를 지정
- CURRENT ROW
> 현재 행
- UNBOUNDED PRECEDING
> 첫번째 행
- UNBOUNDED FOLLOWING
> 마지막 행
- 1 PRECEDING
> 이전행에서 1개까지 선택
- 2 FOLLOWING
> 다음행에서 2개까지 선택
-- 예시
...
) OVER (
PARTITION BY
...
ORDER BY
INSERT_DT -- 기준 컬럼
ROWS BETWEEN -- ROWS 기준 범위 설정
UNBOUNDED PRECEDING -- 첫번째 행부터
AND
1 PRECEDING -- 1번째 이전행까지
)
* 참고사이트
- https://gent.tistory.com/473
- https://www.dba-oracle.com/t_advanced_sql_windowing_clause.htm