상세 컨텐츠

본문 제목

[ORACLE] PARTITION BY() 함수 설명과 실무 SQL 예제 모음

Oracle

by Dev. Orion 2025. 5. 31. 09:41

본문

728x90

오라클 PARTITION BY() 함수 설명과 실무 SQL 예제 모음
[ ORACLE] PARTITION BY

 

PARTITION BY는 Oracle SQL에서 분석 함수(Analytic Function)와 함께 사용되어, 데이터를 논리적으로 그룹화한 후 그 그룹 내에서 계산을 수행할 수 있도록 해주는 매우 유용한 기능입니다.

1. PARTITION BY란?

SQL에서 PARTITION BY는 데이터를 가상의 그룹으로 나누는 역할을 합니다. 일반적으로 RANK(), DENSE_RANK(), ROW_NUMBER(), SUM(), AVG() 등과 같은 분석 함수와 함께 사용됩니다.

📌 기본 문법

함수명() OVER (PARTITION BY 컬럼명 ORDER BY 컬럼명)

2. PARTITION BY 없이 분석 함수 사용

아래는 PARTITION BY 없이 RANK()를 사용하는 예제입니다.

SELECT ename, deptno, sal,
       RANK() OVER (ORDER BY sal DESC) AS rank_global
  FROM emp;

전체 데이터에 대해 급여 기준으로 순위를 계산합니다.

3. PARTITION BY 사용 예제

예제 1: 부서별 급여 순위

SELECT ename, deptno, sal,
       RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) AS rank_in_dept
  FROM emp;
ename deptno sal rank_in_dept
KING 10 5000 1
CLARK 10 2450 2
MILLER 10 1300 3

PARTITION BY deptno를 사용하여 부서별로 순위를 다시 매긴 것을 볼 수 있습니다.

예제 2: 고객별 누적 주문 금액

SELECT customer_id, order_date, amount,
       SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date) AS cumulative_amount
  FROM orders;

4. ORDER BY 절의 의미

ORDER BY그룹 내 정렬을 수행하며, 분석 함수의 결과 값에 영향을 줍니다. 예를 들어 누적 합계를 구할 때는 날짜 순으로 정렬하여 계산해야 합니다.

5. 다양한 분석 함수와의 결합

  • ROW_NUMBER(): 각 그룹 내에서 고유한 순번 생성
  • AVG(): 그룹 내 평균 계산
  • MAX(): 그룹 내 최댓값 계산

예제 3: 각 지역별 매출 순위

SELECT region, product_name, sales,
       RANK() OVER (PARTITION BY region ORDER BY sales DESC) AS region_sales_rank
  FROM sales_data;

6. PARTITION BY 없이 ORDER BY만 사용하면?

아래는 PARTITION BY 없이 누적합을 구한 예입니다. 전체 데이터에 대한 누적합이 됩니다.

SELECT ename, sal,
       SUM(sal) OVER (ORDER BY sal DESC) AS total_running_sum
  FROM emp;

반면 아래는 부서별 누적합을 구한 예입니다.

SELECT deptno, ename, sal,
       SUM(sal) OVER (PARTITION BY deptno ORDER BY sal DESC) AS running_sum_by_dept
  FROM emp;

7. PARTITION BY의 성능과 주의사항

  • 데이터 양이 많을수록 성능 이슈 발생 가능 → 인덱스 최적화 고려
  • ORDER BY 생략 가능하나, 함수에 따라 필수인 경우 있음
  • GROUP BY와 다름: PARTITION BY는 집계가 아닌 행 단위 결과 제공
💡 TIP: PARTITION BY는 보고서나 랭킹, 누적 계산 등 고급 SQL 작성에 필수적인 도구입니다.

8. 정리

항목 설명
기능 데이터 그룹별 분석 함수 실행
주로 사용하는 함수 RANK(), DENSE_RANK(), SUM(), AVG(), ROW_NUMBER()
차이점 GROUP BY는 집계, PARTITION BY는 행 기반 분석
실무 활용 랭킹, 누적 합계, 보고서 생성

9. 참고 문헌 및 출처

728x90

관련글 더보기