6. 정리
집계 함수 뒤에 OVER (PARTITION BY ... ORDER BY ... 프레임) 을 붙이면 행을 줄이지 않고 누적합, 전체 합 대비 비율, 부서 평균 대비 차이를 옆 컬럼으로 붙일 수 있습니다. OVER () 는 전체를, PARTITION BY 는 그룹을 한 단위로 삼습니다.
ORDER BY 만 쓰고 프레임을 생략하면 기본은 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 라서, 정렬 값이 같은 행이 한꺼번에 더해집니다. 행 단위로 쌓으려면 ROWS 프레임을 명시하고 ORDER BY 를 유일하게 만듭니다. 이동 평균은 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW 처럼 씁니다.
윈도 함수는 Oracle 8i·Tibero·MySQL 8.0 부터 지원하고, MSSQL 은 2005 에 OVER (PARTITION BY) 집계만, 집계의 OVER (ORDER BY) 와 프레임은 2012 부터입니다. MSSQL 의 RANGE 는 숫자 오프셋을 못 쓰고, RATIO_TO_REPORT 는 Oracle·Tibero 전용이라 공통으로는 SUM OVER () 와 100.0 을 씁니다.
직전 행·다음 행 값을 가져오는 LAG·LEAD, 프레임의 처음·끝 값을 가져오는 FIRST_VALUE·LAST_VALUE 는 다음 레슨에서 이어집니다. 순위 함수는 고급 01, GROUP BY 와 집계는 중급 10 을 참고하세요.