본문으로 건너뛰기
실습하기

ROWS BETWEEN

ROWS BETWEEN 절은 윈도 함수가 사용할 윈도 프레임을 정의합니다. 계산에 포함될 행이 정확히 어떤 것인지 제어합니다.

이는 누적 합, 롤링 합(구간 합), 이동 평균을 계산할 때 특히 유용합니다.

PARTITION BY가 행을 그룹으로 나누는 것과 달리, ROWS BETWEEN은 현재 행을 기준으로 앞뒤 어느 범위의 행을 계산에 포함할지를 제어합니다.


Syntax

다음과 같이 ROWS BETWEEN을 사용해 윈도 프레임을 정의할 수 있습니다.

ROWS BETWEEN 문법
SELECT column,
window_function(...) OVER (
ORDER BY column
ROWS BETWEEN frame_start AND frame_end
) AS result
FROM table;

Common frame types

일반적으로 ROWS BETWEEN은 현재 행을 기준으로 윈도 함수가 계산에 사용할 정확한 행 범위를 정의합니다.

자주 사용하는 프레임 유형은 다음과 같습니다.

  • UNBOUNDED PRECEDING: 처음 행부터 현재 행까지
  • CURRENT ROW: 현재 처리 중인 행
  • UNBOUNDED FOLLOWING: 현재 행부터 마지막 행까지
  • N PRECEDING / N FOLLOWING: 현재 행 기준으로 앞/뒤 N개의 행

Example: Running Total

다음과 같은 테이블이 있다고 가정해봅시다.

daily_progress

user_iddateprogress_increment
12024-06-0110
12024-06-0220
12024-06-0315
12024-06-0425

사용자별 누적 진행량을 계산해 보겠습니다.

누적 진행량 계산에 ROWS BETWEEN 사용
SELECT user_id,
date,
progress_increment,
SUM(progress_increment) OVER (
PARTITION BY user_id
ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS cumulative_progress
FROM daily_progress;

쿼리 결과는 다음과 같습니다.

Result:

user_iddateprogress_incrementcumulative_progress
12024-06-011010
12024-06-022030
12024-06-031545
12024-06-042570

여기서 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW는 시작 행부터 현재 행까지 모든 행을 포함하므로, 사용자별 누적 합계를 계산합니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!