
NTILE() 함수는 Oracle SQL의 분석 함수(윈도 함수) 중 하나로, 지정한 수의 동일한 구간(타일)으로 행을 분할하는 데 사용됩니다. 데이터를 사분위수, 분위수 등으로 나누고자 할 때 매우 유용하게 사용되며, 고객 등급, 점수 구간, 판매 순위 등의 실무에서 자주 활용됩니다.
1. NTILE() 함수란?
NTILE(n) 함수는 데이터를 n개의 동일한 그룹으로 나누고 각 행이 속한 구간 번호(1 ~ n)를 반환합니다.
문법
NTILE(n) OVER (ORDER BY column_name)
- n: 나눌 구간 수 (정수)
- ORDER BY: 정렬 기준 칼럼 (필수)
2. NTILE() 기본 예제
SELECT employee_id, salary,
NTILE(4) OVER (ORDER BY salary DESC) AS salary_quartile
FROM employees;
이 쿼리는 급여를 기준으로 직원들을 4등분(사분위수)하여 각 직원이 속한 급여 구간을 나타냅니다.
3. 실무 활용 예제
3.1 고객 등급 분류
SELECT customer_id, total_spent,
NTILE(5) OVER (ORDER BY total_spent DESC) AS spending_tier
FROM customer_orders;
총지출 기준으로 고객을 5등급으로 분류할 수 있습니다.
3.2 제품 판매 순위 구간
SELECT product_id, total_sales,
NTILE(3) OVER (ORDER BY total_sales DESC) AS sales_group
FROM product_sales;
판매량 기준으로 제품을 3등급으로 나눠 상중하 그룹을 구분합니다.
3.3 시험 점수 분위 분석
SELECT student_id, score,
NTILE(10) OVER (ORDER BY score DESC) AS decile
FROM exam_results;
학생 점수를 기준으로 10 분위(Decile) 분석을 수행합니다.
4. NTILE()의 동작 원리
NTILE은 전체 행 수를 n으로 나누어 그룹을 만들고, ORDER BY 순서에 따라 각 행에 순차적으로 구간 번호를 부여합니다. 데이터 수가 나누어 떨어지지 않을 경우, 앞쪽 구간부터 하나씩 더 많은 행이 배정됩니다.
5. PARTITION BY와 함께 사용
SELECT department_id, employee_id, salary,
NTILE(3) OVER (PARTITION BY department_id ORDER BY salary DESC) AS dept_group
FROM employees;
부서별 급여 순위를 기준으로 각 부서 내에서 그룹을 나눕니다.
6. NTILE() vs RANK(), DENSE_RANK() 비교
| 함수 | 용도 | 중복값 처리 |
|---|---|---|
| NTILE(n) | 데이터를 n개의 구간으로 나눔 | 동일한 값도 다른 구간으로 분배 가능 |
| RANK() | 순위 반환 | 동순위 존재 시 순위 건너뜀 |
| DENSE_RANK() | 중복 없는 연속 순위 반환 | 동순위 존재 시 순위 유지 |
7. 활용 팁 및 주의사항
- 정렬 기준이 올바르게 지정되지 않으면 결과가 예측 불가능해질 수 있습니다.
NTILE(1)은 항상 1을 반환합니다.- 구간 수가 전체 행 수보다 클 경우, 일부 구간은 빈 값이 될 수 있습니다.
PARTITION BY를 함께 사용하면 그룹별 분할이 가능해져 더욱 세밀한 분석이 가능합니다.
8. 실무 시나리오 요약
- 고객 충성도 분석: 지출 기준으로 고객 5등급 분류
- 성과 평가: 점수 기준 10 분위 등급 부여
- 매출 리포트: 매출 상위 30% 제품 식별
- HR 분석: 부서별 연봉 등급 비교
9. 자주 묻는 질문 (FAQ)
Q. NTILE로 생성된 구간은 항상 균등한가요?
A. 균등하게 나누려고 하지만, 전체 행 수가 나눠 떨어지지 않으면 앞 구간에 1개 더 많을 수 있습니다.
Q. NTILE은 순위 함수인가요?
A. 아니요, NTILE은 순위 기반의 구간 분류 함수입니다. RANK()나 ROW_NUMBER()와는 다릅니다.
Q. NULL 값은 어떻게 처리되나요?
A. ORDER BY 시 NULL 값의 위치는 정렬 방식(ASC/DESC, NULLS FIRST/LAST)에 따라 결정됩니다.
10. 결론
NTILE() 함수는 Oracle SQL에서 데이터를 n개의 구간으로 나누어 분석하고 보고할 때 매우 유용한 도구입니다. 특히 고객 등급, 점수 분포, 제품 그룹화 등 다양한 실무에서 활용할 수 있으며, PARTITION BY와 ORDER BY 옵션을 적절히 활용하면 더 세밀한 분석이 가능합니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle Live SQL: https://livesql.oracle.com
- Stack Overflow 및 SQLServerCentral 등 개발자 커뮤니티
- Mode Analytics SQL 튜토리얼
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] COVAR_POP() 함수로 분산과 공분산 한눈에 이해하기 (0) | 2025.06.02 |
|---|---|
| [ORACLE] CORR() 함수로 상관 관계 분석하는 방법과 실전 예제 (0) | 2025.06.02 |
| [ORACLE] CUME_DIST()로 누적 백분위 실무 중심 예제로 배우기 (0) | 2025.06.01 |
| [ORACLE] LAST_VALUE() 함수 사용법 및 PARTITION BY 활용 법 (0) | 2025.06.01 |
| [ORACLE] FIRST_VALUE() 함수 실전 예제 모음 : PARTITION BY와 함께 (0) | 2025.06.01 |