WINDOWING절
- WINDOWING절 게시글 보러 가기 : https://soondong2.github.io/posts/Windowing/
- 앞서 WINDOWING절에 대해 내용을 다루었지만, 더 상세하게 정리하려고 한다. 아래의 키워드를 숙지하자.
키워드 | 설명 |
---|---|
ROWS | 물리적인 행 단위 |
RANGE | 논리적인 행 집합 |
CURRENT ROW | 현재 행 |
UNBOUNDED PRECEDING | 첫 번째 행 |
UNBOUNDED FOLLOWING | 마지막 행 |
[위치] PRECEDING | [위치] 이전 행 |
[위치] FOLLOWING | [위치] 다음 행 |
ROWS vs RANGE
ROWS
: 조회된 데이터를 물리적 위치(ROWNUM)로 구분하여 모든 행이 1개의 행으로 인식한다.RANGE
: ORDER BY 절에 명시된 칼럼으로 논리적인 행 집합을 구성한다. 집합으로 묶인 그룹을 1개의 행으로 인식한다. 아래의 위의 예제는 SALES_QUARTER 칼럼의 값으로 행 집합을 지정하였다. ORDER BY에 명시된 칼럼에 따라서 행 집합이 바뀔 수 있다.
ROWS 사용법
1
SELECT SUM(sales_amt) OVER(ORDER BY sales_quarter ROWS BETWEEN UNBOUNDED AND CURRENT ROW)
- 다음과 같이 PARTITION BY를 입력할 경우 PARTITION 내부에서만 범위 지정이 유효하다.
1
SELECT SUM(sales_amt) OVER(PARTITION BY sales_quarter ORDER BY sales_month ROWS BETWEEN UNBOUNDED AND CURRENT ROW)
RANGE 사용법
1
SELECT SUM(sales_amt) OVER(ORDER BY sales_quarter RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
- 다음과 같이 ORDER BY절에 명시된 컬럼이 유일한 행이면 ROW와 같은 결과를 나타낸다.
1
SELECT SUM(sales_amt) OVER(ORDER BY TO_NUMBER(sales_month) RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)