ORDER BY effect

ORDER BY가 들어가면 집계 기준이 현재 행까지로 바뀔 수 있다

윈도우 집계에서 ORDER BY는 단순 출력 정렬이 아닙니다. 프레임의 시간축을 만들고, 기본 프레임이 “현재 행까지”의 누적 계산으로 바뀌게 할 수 있습니다.

no ORDER BY

같은 파티션이면 모든 행에 같은 전체합이 붙는다

namesalarydept_total
도윤 5,700 18,900
서연 6,200 18,900
민준 7,000 18,900

SUM(salary) OVER (PARTITION BY dept)는 부서 전체합을 각 직원 행 옆에 반복해서 붙입니다.

전체 파티션
SUM(salary) OVER (
  PARTITION BY dept
) AS dept_total
ORDER BY salary

정렬을 넣으면 행마다 프레임이 전진한다

도윤 5,700
서연 11,900
민준 18,900
namesalaryrunning_total
도윤 5,700 5,700
서연 6,200 11,900
민준 7,000 18,900
행 단위 누적
SUM(salary) OVER (
  PARTITION BY dept
  ORDER BY salary
  ROWS BETWEEN UNBOUNDED PRECEDING
       AND CURRENT ROW
) AS running_total
질문

모든 행에 같은 값이 필요한가

부서 전체합이나 평균을 붙이려면 ORDER BY가 없어야 의도가 더 분명합니다.

프레임

누적이면 ROWS 프레임을 명시한다

행마다 한 칸씩 전진하는 누적을 원하면 ROWS ... CURRENT ROW 를 적어 기본 프레임의 모호함을 줄입니다.

동점

같은 정렬값은 보조 키가 필요하다

급여가 같은 행이 있으면 결과 순서와 프레임 경계가 흔들릴 수 있으므로 사번 같은 보조 정렬 키를 둡니다.