윈도우 함수 한눈에 보기
윈도우 함수(분석 함수)는 행을 합치지 않으면서 각 행 옆에 그룹 통계나 순위를 붙입니다. GROUP BY로 묶으면 부서 평균만 남고 사원 이름이 사라지지만, 윈도우 함수는 사원 행은 그대로 두고 옆에 부서 평균·순위를 더합니다. 결과 행 수는 원본과 같습니다.
형태는 함수() OVER (PARTITION BY 그룹 ORDER BY 정렬 프레임)입니다. PARTITION BY는 계산할 그룹을 나누고(생략하면 전체가 한 그룹), ORDER BY는 그룹 안의 순서를, 프레임(ROWS·RANGE)은 계산에 넣을 행 범위를 정합니다. 윈도우 함수는 SELECT·ORDER BY 절에서만 쓸 수 있어서, 결과로 거르려면 인라인 뷰로 감싼 뒤 바깥 WHERE에서 거릅니다.
윈도우 함수는 WHERE·GROUP BY·HAVING이 끝난 뒤 남은 행을 대상으로 계산합니다. WHERE DEPT_ID = 'D1'을 걸면 전체 합계 SUM(SAL) OVER ()도 D1 두 명의 합 8000이 됩니다. 또 OVER 안의 ORDER BY는 계산 순서일 뿐이라 화면에 나오는 순서는 보장하지 않습니다. 출력 순서는 맨 끝의 ORDER BY로 정합니다.
| NAME | DEPT_ | SAL | HIRE_ |
|---|---|---|---|
| 김 | D1 | 3000 | 2020-01 |
| 이 | D1 | 5000 | 2021-03 |
| 박 | D2 | 4500 | 2022-07 |
| 최 | D2 | 4500 | 2023-09 |
| NAME | DEPT_ID | SAL |
|---|---|---|
| 김 | D1 | 3000 |
| 이 | D1 | 5000 |
| 박 | D2 | 4500 |
| 최 | D2 | 4500 |
| DEPT_ID | AVG |
|---|---|
| D1 | 4000 |
| D2 | 4500 |
| NAME | SAL | DEPT_AVG |
|---|---|---|
| 김 | 3000 | 4000 |
| 이 | 5000 | 4000 |
| 박 | 4500 | 4500 |
| 최 | 4500 | 4500 |
GROUP BY는 이름이 사라지고 2행, 윈도우 함수는 4행 그대로 부서 평균이 옆에 붙습니다.
- PARTITION BY 그룹 나누기
- ORDER BY 그룹 안 정렬
- ROWS·RANGE 계산 범위
- 함수 적용 · 행 옆에 붙임