
Oracle SQL의 CUME_DIST() 함수는 누적 백분율(Cumulative Distribution)을 계산하는 분석 함수로, 정렬된 데이터 집합에서 각 행의 상대적인 위치를 백분율로 알려줍니다.
1. CUME_DIST() 함수란?
CUME_DIST() OVER (PARTITION BY... ORDER BY...) 형식으로 사용되며, 주어진 그룹 내 정렬 기준에 따라 누적 백분율 값을 계산합니다.
문법:
CUME_DIST() OVER (
PARTITION BY column1
ORDER BY column2
)
- PARTITION BY: 그룹 기준
- ORDER BY: 정렬 기준
2. CUME_DIST()의 동작 원리
특정 값 이하의 행 수를 전체 행 수로 나누어 계산합니다.
공식: 누적 비율 = 해당 값 이하의 행 수 / 전체 행 수
3. 기본 사용 예제
SELECT employee_id, department_id, salary,
CUME_DIST() OVER (ORDER BY salary) AS cum_dist
FROM employees;
급여 기준으로 정렬된 전체 데이터에서 각 직원의 누적 백분율을 반환합니다.
4. PARTITION BY를 활용한 그룹 분석
SELECT employee_id, department_id, salary,
CUME_DIST() OVER (
PARTITION BY department_id
ORDER BY salary
) AS dept_cum_dist
FROM employees;
부서별 급여 누적 백분율을 계산합니다. 부서마다 0~1 사이의 값으로 재정렬됩니다.
5. 실무 활용 예제
5.1 고객 구매 누적 분석
SELECT customer_id, total_purchase,
CUME_DIST() OVER (ORDER BY total_purchase) AS purchase_percentile
FROM customer_summary;
고객의 누적 구매 금액을 기반으로 상대적 소비 위치를 판단할 수 있습니다.
5.2 성적 누적 순위 분석
SELECT student_id, score,
CUME_DIST() OVER (ORDER BY score DESC) AS percentile_rank
FROM exam_results;
점수가 높은 순서로 정렬하여, 상위 몇 퍼센트인지 확인합니다.
5.3 제품별 누적 판매 비율
SELECT product_id, sales_amount,
CUME_DIST() OVER (ORDER BY sales_amount DESC) AS sales_percentile
FROM sales_data;
6. PERCENT_RANK()와의 차이점
| 함수 | 첫 번째 행 값 | 계산 공식 | 결과 범위 |
|---|---|---|---|
| CUME_DIST() | 1/N | 행 수 이하 / 전체 행 수 | 0 < 값 ≤ 1 |
| PERCENT_RANK() | 0 | (RANK - 1) / (전체 행 수 - 1) | 0 ≤ 값 ≤ 1 |
7. 실무 적용 팁
- 고객군을 백분율 기반으로 분할할 때 유용
- 전체 중 상위 10% 고객 식별 등 정확한 분석 가능
- OVER 절에서
ORDER BY는 필수
8. 고급 예제
8.1 누적 백분율에 따른 등급 분류
SELECT student_id, score,
CUME_DIST() OVER (ORDER BY score DESC) AS percentile,
CASE
WHEN CUME_DIST() OVER (ORDER BY score DESC) <= 0.2 THEN 'A'
WHEN CUME_DIST() <= 0.4 THEN 'B'
WHEN CUME_DIST() <= 0.6 THEN 'C'
ELSE 'D'
END AS grade
FROM exam_results;
누적 분포에 따라 학업 성취도를 분류할 수 있습니다.
8.2 판매 기준 Top 10% 상품 추출
SELECT * FROM (
SELECT product_id, sales_amount,
CUME_DIST() OVER (ORDER BY sales_amount DESC) AS dist
FROM sales_data
)
WHERE dist <= 0.1;
9. 자주 묻는 질문(FAQ)
Q1. CUME_DIST()는 NULL을 어떻게 처리하나요?
A. ORDER BY 대상이 NULL일 경우, 기본 정렬 규칙(오름차순일 경우 NULL 먼저)에 따라 처리됩니다.
Q2. 소수점 자릿수는 조정 가능한가요?
A. 출력값은 기본적으로 FLOAT로 나오며, ROUND()로 조정 가능합니다.
Q3. CUME_DIST는 중복 값이 있을 경우 어떻게 계산되나요?
A. 동일한 값은 같은 누적 백분율을 반환하며, 해당 값 이하의 행 수 기준으로 계산됩니다.
10. 요약
CUME_DIST()는 데이터의 누적 분포를 확인할 수 있는 매우 유용한 Oracle 분석 함수입니다. 마케팅, 성과 평가, 제품 분석 등 다양한 분야에서 상대적 순위를 구분하고자 할 때 널리 활용됩니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle Live SQL 실습: https://livesql.oracle.com
- SQLServerCentral 및 Stack Overflow 실전 예제
- 모드 애널리틱스 SQL 튜토리얼
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] CORR() 함수로 상관 관계 분석하는 방법과 실전 예제 (0) | 2025.06.02 |
|---|---|
| [ORACLE] NTILE() 함수로 순위 그룹 나누기 완벽 가이드 (0) | 2025.06.01 |
| [ORACLE] LAST_VALUE() 함수 사용법 및 PARTITION BY 활용 법 (0) | 2025.06.01 |
| [ORACLE] FIRST_VALUE() 함수 실전 예제 모음 : PARTITION BY와 함께 (0) | 2025.06.01 |
| [ORACLE] LEAD() 함수와 LAG() 함수 비교 분석 (0) | 2025.06.01 |