홈 › SQL 고급 › 02 / 10

집계 분석 함수와 윈도 프레임

SUM OVER, 누적합, 이동 평균, 비율
섹션 6진행 0 / 10

집계 분석 함수와 윈도 프레임: SUM OVER, 누적합, 이동 평균, 비율

"월별 누적 매출", "최근 3건 이동 평균", "전체 대비 비율"처럼 행을 줄이지 않고 집계 값을 옆에 붙이는 조회는 리포트에서 자주 나옵니다. 이 레슨은 SUM(...) OVER (...) 로 누적합·비율·부서 평균 대비 차이를 구하고, 윈도 프레임(ROWS·RANGE)이 결과를 어떻게 바꾸는지, 특히 같은 날짜 행이 있을 때의 함정을 짚습니다.

1. 왜 배우는가

중급 10 의 GROUP BY 는 행을 그룹당 1행으로 줄입니다. 그런데 "각 주문 옆에 지금까지의 누적 매출을 붙여라", "각 직원 옆에 부서 평균을 붙여라" 같은 요구는 원래 행을 그대로 두고 집계 값만 덧붙여야 합니다. GROUP BY 로는 서브쿼리와 조인을 거쳐야 하지만, 윈도 함수는 한 문장으로 끝납니다.

집계 함수 뒤에 OVER (...) 를 붙이면 그 집계 함수가 윈도 함수가 됩니다. OVER 안에서 PARTITION BY 는 집계할 그룹을, ORDER BY 는 행의 순서를, 프레임(ROWS·RANGE)은 각 행이 집계에 쓰는 범위를 정합니다.

이 주제가 실무에서 위험한 이유는 오류 없이 값이 어긋나기 때문입니다. ORDER BY 만 쓰고 프레임을 생략하면 같은 날짜 행이 한꺼번에 더해지는데, 문법 오류도 없고 합계도 그럴듯해 보여서 놓치기 쉽습니다.

참고

순위 함수(RANK·ROW_NUMBER)는 고급 01, GROUP BY 와 집계 함수는 중급 10 에서 다뤘습니다. 이 레슨은 집계 함수를 OVER 와 함께 쓰는 방법만 다룹니다.