본문 바로가기
기획자가 알아야 할 IT지식/기획자가 알아야 할 SQL

24강. 그룹을 나누어 순위를 매기기 (NTILE 함수)

by 일잘러로 살기 2025. 3. 24.

SQL의 NTILE() 함수는 데이터를 N개의 그룹으로 균등하게 나누어 그룹 번호를 부여하는 함수입니다.
예를 들어, **상위 25%, 중위 25%, 하위 25%**와 같이 데이터를 구간별로 나누는 데 유용합니다.


✅ 1. NTILE() 함수 개념

NTILE(N) 함수는 데이터를 N개의 그룹으로 균등하게 분배하며,
각 행은 1부터 N까지의 그룹 번호를 부여받음

📌 기본 문법

SELECT column_name,
       NTILE(N) OVER (ORDER BY column_name) AS group_num
  FROM table_name;

✅ 2. NTILE 예제

📌 예제 1: 직원 급여를 4개 그룹으로 나누기

SELECT employee_id, name, salary,
       NTILE(4) OVER (ORDER BY salary DESC) AS salary_group
  FROM employees;


📌 실행 결과

설명

  • 급여(salary) 기준 내림차순 정렬 후, 4개의 그룹으로 분배
  • 급여가 높은 직원이 1번 그룹, 낮은 직원이 4번 그룹

✅ 3. NTILE() 활용 사례

📌 예제 2: 학생 성적을 3개의 등급으로 나누기

학생 성적(score)을 기준으로 상위, 중위, 하위 3등급으로 나누는 경우

SELECT student_id, name, score,
       NTILE(3) OVER (ORDER BY score DESC) AS grade
  FROM students;

설명

  • NTILE(3)을 사용해 상위(1), 중위(2), 하위(3) 그룹으로 분류
  • 성적이 높은 학생이 1등급, 낮은 학생이 3등급

📌 예제 3: 고객을 VIP/일반/보통 그룹으로 나누기

고객의 구매 금액을 기준으로 3개의 그룹(VIP, 일반, 보통 고객)으로 나누는 경우

SELECT customer_id, name, total_spent,
       NTILE(3) OVER (ORDER BY total_spent DESC) AS customer_group
  FROM customers;

설명

  • NTILE(3)을 사용해 구매 금액을 기준으로 VIP/일반/보통 고객으로 나눔
  • 구매 금액이 높은 고객이 1번 그룹(VIP)

✅ 4. NTILE() vs RANK() vs DENSE_RANK() 차이점


함수 설명
RANK() 동일한 순위가 있으면 건너뛰고 다음 순위 부여
DENSE_RANK() 동일한 순위가 있어도 연속된 순위 부여
NTILE(N) N개의 그룹으로 분배, 그룹 번호 부여

📌 차이점 예제 (급여 기준 정렬)

 


✅ 5. 정리

✅ NTILE(N) 함수는 데이터를 N개의 그룹으로 균등하게 분배하는 데 사용
✅ ORDER BY 기준으로 상위, 중위, 하위 등급을 나누는 경우에 유용
✅ RANK(), DENSE_RANK()와 다르게 순위가 아니라 그룹을 나누는 기능
VIP 고객, 성적 등급, 급여 등급과 같은 그룹화가 필요한 경우 사용하면 효과적