Разбиение на группы с 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 — локальная установка не требуется.
Все уроки этого курса
- Рамки: ROWS и RANGE
- LAG и LEAD с оконными рамками
- Разбиение на группы с NTILE и Cume_Dist
- Шаблоны отчётности из реальной практики