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;
결과
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
→ 첫 번째 행부터 현재 행까지의 값을 모두 포함하므로, 누적 합계를 계산할 수 있습니다.
Quiz
0 / 1
SQL의 ROWS BETWEEN 절은 윈도 함수에서 사용할 행의 정확한 범위를 지정하는 데 사용할 수 있습니다.
○
✕
학습 자료
AI 튜터
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
코드 실행
코드 생성
DB 테이블 구조
실행 결과