입력 테이블 employees
5 rows
| emp | dept | salary |
|---|---|---|
| E01 | 개발 | 7000 |
| E02 | 개발 | 6200 |
| E03 | 개발 | 6000 |
| E04 | 영업 | 5600 |
| E05 | 영업 | 4800 |
같은 부서 평균을 계산해도 결과 집합의 모양이 다릅니다. GROUP BY는 부서별 한 행만 남기고, 윈도우 함수는 각 직원 행 옆에 평균을 붙입니다.
GROUP BY dept
같은 dept 행을 하나로 접고 평균만 남깁니다.
5 → 2 rows
| emp | dept | salary |
|---|---|---|
| E01 | 개발 | 7000 |
| E02 | 개발 | 6200 |
| E03 | 개발 | 6000 |
| E04 | 영업 | 5600 |
| E05 | 영업 | 4800 |
SELECT dept, AVG(salary) AS dept_avg FROM employees GROUP BY dept;
| dept | dept_avg | 남지 않는 값 |
|---|---|---|
| 개발 | 6400 | E01, E02, E03 |
| 영업 | 5200 | E04, E05 |
SELECT emp, dept, salary,
AVG(salary) OVER (
PARTITION BY dept
) AS dept_avg
FROM employees;
| emp | dept | salary | dept_avg |
|---|---|---|---|
| E01 | 개발 | 7000 | 6400 |
| E02 | 개발 | 6200 | 6400 |
| E03 | 개발 | 6000 | 6400 |
| E04 | 영업 | 5600 | 5200 |
| E05 | 영업 | 4800 | 5200 |
GROUP BY가 아니라 AVG(...) OVER (...)를 쓴다.