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_id | date | progress_increment |
---|---|---|
1 | 2024-06-01 | 10 |
1 | 2024-06-02 | 20 |
1 | 2024-06-03 | 15 |
1 | 2024-06-04 | 25 |
사용자별 누적 진행량을 계산해 보겠습니다.
누적 진행량 계산에 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_id | date | progress_increment | cumulative_progress |
---|---|---|---|
1 | 2024-06-01 | 10 | 10 |
1 | 2024-06-02 | 20 | 30 |
1 | 2024-06-03 | 15 | 45 |
1 | 2024-06-04 | 25 | 70 |
여기서 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
는 시작 행부터 현재 행까지 모든 행을 포함하므로, 사용자별 누적 합계를 계산합니다.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!