Home [MySQL] WINDOWING절 - ROWS vs RANGE
Post
Cancel

[MySQL] WINDOWING절 - ROWS vs RANGE

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에 명시된 칼럼에 따라서 행 집합이 바뀔 수 있다.

image

ROWS 사용법

1
SELECT SUM(sales_amt) OVER(ORDER BY sales_quarter ROWS BETWEEN UNBOUNDED AND CURRENT ROW)

image

  • 다음과 같이 PARTITION BY를 입력할 경우 PARTITION 내부에서만 범위 지정이 유효하다.
    1
    
    SELECT SUM(sales_amt) OVER(PARTITION BY sales_quarter ORDER BY sales_month ROWS BETWEEN UNBOUNDED AND CURRENT ROW)
    

image

RANGE 사용법

1
SELECT SUM(sales_amt) OVER(ORDER BY sales_quarter RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

image

  • 다음과 같이 ORDER BY절에 명시된 컬럼이 유일한 행이면 ROW와 같은 결과를 나타낸다.
    1
    
    SELECT SUM(sales_amt) OVER(ORDER BY TO_NUMBER(sales_month) RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
    

image

This post is licensed under CC BY 4.0 by the author.