0Pricing
SQL Academy · Урок

Разбиение на группы с NTILE и Cume_Dist

Разделяйте строки на N равных по размеру групп с помощью NTILE и вычисляйте кумулятивное распределение с помощью CUME_DIST и PERCENT_RANK

«Разбиение на группы с NTILE и Cume_Dist» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

NTILE: группы равного размера

NTILE(n) разделяет упорядоченные строки на n примерно равных групп:

SELECT id, total,
       NTILE(4) OVER (ORDER BY total) AS quartile
FROM orders;
-- 1 = bottom 25%, 2 = next, 3, 4 = top 25%

Процентильные группы

Используйте NTILE(10) для децилей и NTILE(100) для процентилей:

SELECT id, score,
       NTILE(100) OVER (ORDER BY score DESC) AS percentile
FROM students;
-- percentile 1 = top 1%

PERCENT_RANK

Относительный ранг в виде числа с плавающей точкой из диапазона [0, 1]:

SELECT id, score,
       PERCENT_RANK() OVER (ORDER BY score) AS pct_rank
FROM students;
-- 0 for the lowest, 1 for the highest.

CUME_DIST

Доля строк, значение которых меньше либо равно значению текущей строки:

SELECT id, score,
       CUME_DIST() OVER (ORDER BY score) AS cume_dist
FROM students;
-- "What share of students scored ≤ this one?"

Статистика процентилей с PERCENTILE_CONT

Вычислите значение на заданном процентиле (с непрерывной интерполяцией):

SELECT
  PERCENTILE_CONT(0.5)  WITHIN GROUP (ORDER BY total) AS median,
  PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY total) AS p95,
  PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY total) AS p99
FROM orders;

PERCENTILE_DISC

Подобно PERCENTILE_CONT, но возвращает реально существующее значение, а не интерполированное:

PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY total)

NTILE для разделов

Создавайте группы отдельно для каждого пользователя, категории и так далее:

SELECT user_id, total,
       NTILE(4) OVER (PARTITION BY user_id ORDER BY total) AS user_quartile
FROM orders;

Гистограмма через NTILE

Создайте интервалы гистограммы:

SELECT bucket, MIN(total) AS bucket_min, MAX(total) AS bucket_max, COUNT(*)
FROM (
  SELECT NTILE(10) OVER (ORDER BY total) AS bucket, total
  FROM orders
) sub
GROUP BY bucket
ORDER BY bucket;

Агрегация по группам

После распределения по группам вычислите статистику для каждой группы:

SELECT user_quartile, COUNT(*) AS users, AVG(total) AS avg_total
FROM (
  SELECT user_id, NTILE(4) OVER (ORDER BY total) AS user_quartile, total
  FROM orders
) sub
GROUP BY user_quartile;

Объединение оконных функций

Объединяйте их в одном запросе, чтобы получить подробный отчёт:

SELECT id, total,
       NTILE(4) OVER w     AS quartile,
       PERCENT_RANK() OVER w AS pct_rank,
       AVG(total) OVER w     AS overall_avg
FROM orders
WINDOW w AS (ORDER BY total);

Когда NTILE вводит в заблуждение

Одинаковые значения в ORDER BY могут привести к неравным размерам групп (NTILE не учитывает совпадения). Используйте столбец для разрешения равенства.

Итоги

NTILE + PERCENT_RANK + CUME_DIST охватывают анализ распределений.

  • NTILE — для квантильных групп
  • PERCENTILE_CONT/DISC — для статистики p50/p95/p99
  • Объединяйте с PARTITION BY для анализа отдельных групп

Быстрая проверка

Вам нужно получить задержку p95 из столбца со временем ответа. Какую функцию использовать?

Часто задаваемые вопросы

Урок «Разбиение на группы с NTILE и Cume_Dist» бесплатный?

Да — полный текст урока «Разбиение на группы с NTILE и Cume_Dist» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Разбиение на группы с NTILE и Cume_Dist»?

Разделяйте строки на N равных по размеру групп с помощью NTILE и вычисляйте кумулятивное распределение с помощью CUME_DIST и PERCENT_RANK Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Разбиение на группы с NTILE и Cume_Dist»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Рамки: ROWS и RANGE
  2. LAG и LEAD с оконными рамками
  3. Разбиение на группы с NTILE и Cume_Dist
  4. Шаблоны отчётности из реальной практики
← Назад к SQL Academy