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

ROWS BETWEEN

ROWS BETWEEN 절은 윈도 함수에서 계산에 포함할 행의 범위를 지정하는 구문입니다.

현재 행을 기준으로 앞뒤 어느 행까지 포함할지를 정의할 수 있어, 누적 합계, 이동 평균, 롤링 합계 같은 계산에 자주 사용됩니다.

PARTITION BY가 그룹을 나누는 데 초점을 맞춘다면, ROWS BETWEEN은 계산 범위를 정밀하게 제어하는 역할을 합니다.


문법

ROWS BETWEEN 기본 문법
SELECT
column,
window_function(...) OVER (
ORDER BY column
ROWS BETWEEN frame_start AND frame_end
) AS result
FROM table;
  • frame_start: 윈도 시작점
  • frame_end: 윈도 끝점

자주 사용하는 프레임 유형

구문의미
UNBOUNDED PRECEDING첫 번째 행부터 포함
CURRENT ROW현재 행
UNBOUNDED FOLLOWING현재 행부터 마지막 행까지 포함
N PRECEDING현재 행을 기준으로 앞으로 N행
N FOLLOWING현재 행을 기준으로 뒤로 N행

이들을 조합해 다양한 계산 범위를 정의할 수 있습니다.


예시: 누적 합계(Running Total)

아래와 같은 학습 진행 테이블이 있다고 가정해 봅시다.

daily_progress

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

사용자별 누적 학습 진도를 계산해 보겠습니다.

누적 합계 계산
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;

결과

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 강의를 등록해 주세요!