프레임 기준

프레임 경계가 누적합과 이동 평균을 바꾼다

같은 SUM() OVER라도 프레임 단위가 행 수인지, 정렬값의 동점 묶음인지에 따라 계산 대상이 달라진다. 누적합과 이동 평균은 프레임을 명시해야 의도가 고정된다.

현재 행
ROWS가 세는 행
RANGE가 함께 묶는 동점 행

ROWS: 현재 위치에서 행 개수를 센다

행 수 기준
1월100
2월200
3월현재 행
4월150
5월180
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING

현재 행 앞뒤 1행씩, 총 3행이 이동 평균의 입력이 된다.

RANGE: 같은 정렬값의 동점 행을 함께 본다

정렬값 기준
1일100
2일200
2일현재 행
3일300
4일120
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

ORDER BY day만 둔 예시라 2일 행이 같은 누적 범위에 들어간다.

동점 행이 있으면 ROWS와 RANGE 결과가 벌어진다

누적합 비교
금액 ROWS 누적 RANGE 누적
1일 100 100 100
2일-a 200 300 500
2일-b 200 500 500
3일 300 800 800
01 이동 평균

앞뒤 N행이면 ROWS로 물리적 폭을 고정한다.

02 누적합

UNBOUNDED PRECEDINGCURRENT ROW를 명시한다.

03 동점 처리

고유 키를 정렬에 더하면 동점 묶음이 갈라지는지 먼저 확인한다.

04 이식성

값 범위 프레임은 타입과 간격 표현 지원을 DBMS별로 확인한다.

정렬값에 중복이 있으면 기본 프레임에 기대는 쿼리가 예상보다 넓은 범위를 계산할 수 있다. 운영 SQL에서는 ROWS 또는 RANGE 선택 의도를 코드에 남긴다.