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