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_id | date | progress_increment |
---|---|---|
1 | 2024-06-01 | 10 |
1 | 2024-06-02 | 20 |
1 | 2024-06-03 | 15 |
1 | 2024-06-04 | 25 |
사용자별 누적 학습 진도를 계산해 보겠습니다.
누적 합계 계산
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;