[SQL] NTILE() 함수로 데이터를 분위로 나누기

Unit·2025년 10월 19일

SQL

목록 보기
41/59

데이터를 분석하다 보면
상위 10% 고객, 매출액 기준으로 4분위로 구분처럼 값의 크기를 기준으로 구간을 나누고 싶은 상황이 있습니다.

이럴 때 사용할 수 있는 함수가 바로 NTILE() 입니다.


🎯 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_idtotal_amountquartile
A0019500001
A0027800001
A0035600002
A0043100003
A0051200004
  • 1분위(quartile = 1) → 상위 25%
  • 4분위(quartile = 4) → 하위 25%

💡 언제 사용하면 좋을까?

상황사용 목적
고객을 매출 기준으로 그룹화상·중·하위 고객 구간 구분
앱 사용자 로그활동량에 따라 구간화
성적·점수 데이터상위권 / 중위권 / 하위권 구분
상품 판매량 분석판매량 기준 구간별 분포 비교

즉, NTILE은 데이터를 비율 단위로 구분하고 싶을 때 사용하는 함수입니다.
값의 “순위 기반 위치”를 손쉽게 계산할 수 있습니다.


⚠️ 주의할 점

  1. 값 자체가 아니라 행 수 기준으로 나눕니다.
    → 구간별 행의 개수는 비슷하지만, 값 분포는 고르지 않을 수 있습니다.

  2. 데이터 개수가 n으로 나누어떨어지지 않으면 구간 크기가 다를 수 있습니다.
    → 예 : 10행을 3분위로 나누면 (4,3,3) 식으로 분할됩니다.

  3. 값 기준 분위(25%, 50%, 75%)를 구하고 싶다면
    percentile_cont() 또는 percentile_disc() 함수를 사용하세요.


정리

✔️ NTILE()은 데이터를 비율 단위로 구분해 각 행의 상대적 위치를 알려주는 함수입니다.
✔️ 상위 10%, 하위 20%처럼 구간 기반 비교 분석을 쉽게 할 수 있습니다.

profile
협업, 유지보수, 최적화를 고려한 데이터 실무 팁을 정리합니다.

0개의 댓글