본문 바로가기
오라클

[오라클] PARTITION BY 완벽 정리

by devlog93 2026. 1. 17.

오라클에서 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에 대해 알아보자...! 감사합니다. (_ _)