행 축소 vs 행 유지

GROUP BY와 윈도우 함수의 결정적 차이

GROUP BY는 여러 행을 하나의 요약 행으로 접고, 윈도우 함수는 원본 행을 유지한 채 분석 결과 열을 옆에 붙인다. “행을 줄일 것인가, 행마다 값을 붙일 것인가”가 선택 기준이다.

입력 행

직원 5명이 부서별로 섞여 있다

이름부서급여
민준개발7,000
서연개발6,200
지우영업5,900
하린개발5,700
도윤영업5,600
5 원본 행
2 GROUP BY 결과
5 + 열 윈도우 결과
결과 모양

GROUP BY는 접고, 윈도우 함수는 붙인다

부서인원평균 급여
개발36,300
영업25,750
이름부서급여부서 평균
민준개발7,0006,300
서연개발6,2006,300
지우영업5,9005,750
하린개발5,7006,300
도윤영업5,6005,750
입력 5행 직원 원본 행
GROUP BY 부서별 요약 2행만 남긴다.
행 축소
윈도우 함수 원본 5행을 유지하고 평균 열을 옆에 붙인다.
행 유지
5 직원 원본 행
2 GROUP BY 결과는 부서 수만 남는다.
5 윈도우 함수는 분석 열만 붙인다.
질문 GROUP BY 윈도우 함수
결과 행 수 행을 줄여도 되는가.
그룹 수만큼 줄어든다.
원본 행 수를 유지한다.
개별 행 비교 개별 직원과 부서 평균을 함께 볼 것인가.
개별 행 정보가 사라진다.
개별 행 옆에 평균, 순위, 누적값을 붙인다.
필터 위치 분석 결과 조건을 어디에 둘 것인가.
HAVING으로 집계 결과를 거른다.
CTE/서브쿼리 밖에서 윈도우 별칭을 거른다.
행 축소

부서별 요약표가 목적이면 GROUP BY

SELECT dept, COUNT(*) AS people,
       AVG(salary) AS dept_avg
FROM employees
GROUP BY dept;
행 유지

직원별 행에 부서 평균을 붙이면 윈도우 함수

SELECT name, dept, salary,
       AVG(salary) OVER (
         PARTITION BY dept
       ) AS dept_avg
FROM employees;
1
요약표 그룹별 한 줄만 필요하면 GROUP BY를 쓴다.
2
행별 비교 개별 행과 집계값을 같이 보려면 윈도우 함수를 쓴다.
3
결과 필터 윈도우 별칭 조건은 바깥 SELECT에서 건다.