PARTITION BY

행은 유지하고 계산 묶음만 나눈다

PARTITION BY department는 부서별 평균을 따로 계산하지만 직원 행을 부서 행 하나로 줄이지 않는다. 그래서 개인 급여, 부서 평균, 평균과의 차이를 같은 결과 행에서 비교할 수 있다.

원본 5행 부서별 윈도우 행마다 평균 행 수 유지 개발 / 영업으로 분리 평균과 차이를 붙임

1. 원본 직원 행

5행 유지
직원 부서 급여
민준 개발 7,000
서연 개발 6,200
도윤 개발 5,700
지우 영업 5,900
하린 영업 5,600
AVG(salary) OVER (
  PARTITION BY department
) AS dept_avg

2. 파티션별 계산

윈도우
개발 파티션
민준 7,000 서연 6,200 도윤 5,700
평균 6,300
영업 파티션
지우 5,900 하린 5,600
평균 5,750

파티션은 계산 범위만 나눌 뿐 결과 행을 합치지 않는다. 같은 부서 행마다 같은 부서 평균이 붙는다.

3. 평균을 붙인 결과

비교
직원 부서 급여 평균 차이
민준 개발 7,000 6,300 +700
서연 개발 6,200 6,300 -100
도윤 개발 5,700 6,300 -600
지우 영업 5,900 5,750 +150
하린 영업 5,600 5,750 -150
GROUP BY department

부서별 2행으로 줄어든다

개인 직원 행은 사라지고 개발 평균, 영업 평균만 남는다.

PARTITION BY department

직원 5행이 그대로 남는다

각 직원 옆에 자기 부서 평균과 차이를 붙여 비교한다.

PARTITION BY는 데이터를 그룹별로 “접어서” 요약하는 절이 아니라, 윈도우 함수가 참조할 계산 묶음을 나누는 절이다.