데이터를 분석하다 보면
상위 10% 고객, 매출액 기준으로 4분위로 구분처럼 값의 크기를 기준으로 구간을 나누고 싶은 상황이 있습니다.
이럴 때 사용할 수 있는 함수가 바로 NTILE() 입니다.
NTILE()은 정렬된 데이터를 n개의 구간으로 나누는 윈도우 함수입니다.
각 행에 “이 행이 몇 분위에 속하는지”를 알려주는 번호(1~n)를 반환합니다.
NTILE(n) OVER (ORDER BY column)
n : 나눌 구간의 개수 (예 : 4 → 4분위, 10 → 10분위)
ORDER BY : 나누는 기준이 되는 컬럼 (예 : 매출액, 점수, 구매 횟수 등)
고객별 구매금액 데이터를 4분위로 나눠본다면 아래와 같습니다.
SELECT customer_id
, total_amount
, NTILE(4) OVER (ORDER BY total_amount DESC) AS quartile
FROM customer_sales;
| customer_id | total_amount | quartile |
|---|---|---|
| A001 | 950000 | 1 |
| A002 | 780000 | 1 |
| A003 | 560000 | 2 |
| A004 | 310000 | 3 |
| A005 | 120000 | 4 |
| 상황 | 사용 목적 |
|---|---|
| 고객을 매출 기준으로 그룹화 | 상·중·하위 고객 구간 구분 |
| 앱 사용자 로그 | 활동량에 따라 구간화 |
| 성적·점수 데이터 | 상위권 / 중위권 / 하위권 구분 |
| 상품 판매량 분석 | 판매량 기준 구간별 분포 비교 |
즉, NTILE은 데이터를 비율 단위로 구분하고 싶을 때 사용하는 함수입니다.
값의 “순위 기반 위치”를 손쉽게 계산할 수 있습니다.
값 자체가 아니라 행 수 기준으로 나눕니다.
→ 구간별 행의 개수는 비슷하지만, 값 분포는 고르지 않을 수 있습니다.
데이터 개수가 n으로 나누어떨어지지 않으면 구간 크기가 다를 수 있습니다.
→ 예 : 10행을 3분위로 나누면 (4,3,3) 식으로 분할됩니다.
값 기준 분위(25%, 50%, 75%)를 구하고 싶다면
→ percentile_cont() 또는 percentile_disc() 함수를 사용하세요.
✔️ NTILE()은 데이터를 비율 단위로 구분해 각 행의 상대적 위치를 알려주는 함수입니다.
✔️ 상위 10%, 하위 20%처럼 구간 기반 비교 분석을 쉽게 할 수 있습니다.