Ранжирование SQL: RANK, DENSE_RANK, ROW_NUMBER, NTILE

15 задач Лёгкие, средние, сложные С эталонными решениями Решение в браузере
Ранжирование — must-have для топ-N запросов, медианы, перцентилей. На собесе: «топ-3 продукта по выручке в каждой категории», «медианный чек», «90-й перцентиль доставки», «найди вторую по величине зарплату». 22 задачи на ранги.
Начать решать задачи →

Все задачи на «ranking» (15)

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

ROW_NUMBER vs RANK vs DENSE_RANK?

ROW_NUMBER — уникальный номер каждой строке (1,2,3,4). RANK — одинаковый ранг для равных, пропускает (1,2,2,4). DENSE_RANK — одинаковый ранг для равных, не пропускает (1,2,2,3).

Как посчитать медиану в SQL?

PostgreSQL: PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY x). Где нет — через NTILE(2) + AVG или трюк с ROW_NUMBER + COUNT OVER и взятие 1-2 средних значений.

Что делает NTILE?

NTILE(N) делит данные на N равных групп. NTILE(4) — квартили (25%, 50%, 75%, 100%). NTILE(10) — децили. Используется для RFM-сегментации, percentile-buckets.

Топ-3 в каждой группе как сделать?

CTE: ROW_NUMBER() OVER (PARTITION BY group ORDER BY metric DESC) AS rn → WHERE rn <= 3.

Связанные темы SQL

Агрегации · JOIN-запросы · Оконные функции · CTE (Common Table Expressions) · Подзапросы · Работа с датами · Строковые функции · Условная логика

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