Функция NTILE() в SQL: квартили, децили и сегментация

NTILE(n) — оконная функция, которая делит отсортированные строки окна на n примерно равных по размеру групп и присваивает каждой строке номер группы от 1 до n. Аналитик использует её для квантильной сегментации: квартили (NTILE(4)), децили (NTILE(10)), разбиение клиентов по сумме покупок на бакеты — основа RFM и ABC-анализа.

Синтаксис

NTILE(число_групп) OVER (PARTITION BY … ORDER BY …)

Примеры использования

Пример 1: Разбить клиентов на 4 квартиля по выручке

SELECT user_id, total_revenue,
       NTILE(4) OVER (ORDER BY total_revenue DESC) AS quartile
FROM customer_revenue;

Результат:

user_id | total_revenue | quartile
1       | 5000          | 1
2       | 3200          | 1
3       | 800           | 4

Пример 2: Децили выручки внутри каждого региона

SELECT region, user_id, revenue,
       NTILE(10) OVER (PARTITION BY region ORDER BY revenue DESC) AS decile
FROM sales;

Результат:

region | user_id | revenue | decile
МСК    | 1       | 900     | 1
МСК    | 2       | 100     | 10
Порешать SQL-задачи в тренажёре →

Типичная ошибка

NTILE делит по количеству строк, а не по значению: в разные группы могут попасть одинаковые значения, если они на границе бакета. Если группы не делятся нацело, первые группы получают на одну строку больше. Для порогов по значению (а не по количеству) используй PERCENTILE_CONT/DISC.

Где спрашивают на собеседовании

NTILE — основа RFM-сегментации и вопроса «раздели клиентов на квантили». На собеседовании поясни разницу между делением по количеству строк (NTILE) и по значению (перцентили), и как получить границы бакетов.

FAQ: частые вопросы про NTILE

Чем NTILE отличается от перцентилей?

NTILE делит на группы по числу строк (равное количество в каждой), а PERCENTILE_CONT/DISC возвращают пороговое значение на заданной доле распределения. NTILE отвечает «в какой квантиль попала строка», перцентиль — «какое значение на 90-й перцентили».

Как посчитать квартили через NTILE?

Используй NTILE(4) с ORDER BY по метрике: группа 1 — верхние 25%, группа 4 — нижние 25% (или наоборот при ASC).

Что делает NTILE при неровном делении?

Если строк не поровну, первые группы получают на одну строку больше остальных — так NTILE распределяет остаток.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Оконные функции · RFM-анализ

Другие функции SQL

ROW_NUMBER · RANK · DENSE_RANK · LAG · LEAD · SUM OVER

Открыть SQL-тренажёр (565 задач) →