오라클에서 PARTITION BY는 주로 분석함수와 함께 사용된다. 데이터를 그룹으로 나눈 뒤에 그룹 결과를 횡단 위로 보고 싶을 때 사용하는 문법이다. 처음 보면 GROUP BY와 비슷해 보이지만 완전히 다르다. 알고 있으면 그룹별로 결과를 보고 싶을 때 자주 사용하니 알아보자...!
1. PARTITION BY란?
PARTIOTION BY는 데이터를 파티션으로 나누는 역할을 한다. 하지만 GROUP BY처럼 행을 줄이지는 않는다. 원본 행을 유지하면서 계산 결과를 추가해 준다는것이 차이점이다.!
- GROUP BY -> 행 개수 줄어듬.
- PARTITION BY -> 행 개수 유지됨.
2. PARTITION BY 기본 구조
- OVER(): 분석 함수인 것을 나타낸다...!
- PARTITION BY: 데이터를 나눌 기준...!
- ORDER BY: 파티션 내부에서의 정렬 기준...!
분석함수() OVER(PARTITION BY 컬럼 ORDER BY 컬럼)
3. 기본 예제: 부서별 급여 평균 구하기
EMP 테이블
| EMPNO | ENAME | DEPTNO | SAL |
| 7369 | SMITH | 20 | 800 |
| 7499 | ALLEN | 30 | 1600 |
| 7566 | JONES | 20 | 2975 |
❌ GROUP BY 사용 시
SELECT DEPTNO
, AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
⭕ PARTITION BY 사용 시
SELECT EMPNO
, ENAME
, DEPTNO
, SAL
, AVG(SAL) OVER(PARTITION BY DEPTNO) AS DEPT_AVG_SAL
FROM EMP;
- 각 사원의 정보는 그대로
- 같은 부서의 평균 급여가 각 행마다 표시된다...!
- PARTITION BY의 대표적인 사용 목적이다...!
4. PARTITION BY + ORDER BY 활용
부서별 급여 순위 구하기
- 부서별로 나눈 뒤에 급여가 높은 순서대로 순번 부여.
SELECT ENAME
, DEPTNO
, SAL
, ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) AS RN
FROM EMP;
5. 자주 사용하는 분석 함수들
- ROW_NUMBER(): 순번
- RANK(): 공동 순위 허용
- DENSE_RANK(): 순위 건너뛰지 않음
- SUM(): 누적 합계
- AVG(): 평균
- COUNT(): 개수
6. PARTITION BY vs GROUP BY 차이
| 구분 | PARTITION BY | GROUP BY |
| 행 유지 | O | X |
| 결과 형태 | 분석 결과 추가 | 집계 결과 |
| 사용 위치 | OVER 절 | SELECT 절 |
| 주 용도 | 순위, 누적, 비교 | 요약 통계 |
마무리
PARTITION BY는 요약된 기준을 각 행에 다시 적용하는 비교하고 분석하는 것이라고 볼 수 있다. GROUP BY와 차이를 이해하면 순위 계산, 누적 합계, 최신 데이터 같은 조회 작업에서 GROUP BY가 아니라 PARTITION BY가 필요한지 알 수 있을 것이다. 이것도 마찬가지로 너무 무분별한 사용을 하게 되면 성능 저하가 될 수 있다. 다음 글에서는 RANK와 DENSE_RANK에 대해 알아보자...! 감사합니다. (_ _)
'오라클' 카테고리의 다른 글
| [오라클] COUNT(*) 와 COUNT(컬럼)의 차이 완벽 정리 (0) | 2026.01.20 |
|---|---|
| [오라클] UNION vs UNION ALL 차이 완벽 정리 (0) | 2026.01.19 |
| [오라클] DELETE vs DROP vs TRUNCATE 완벽 정리 (0) | 2026.01.16 |
| [오라클] DROP 문 완벽 정리 (1) | 2026.01.15 |
| [오라클] ALTER 문 완벽 정리 (0) | 2026.01.14 |