← К курсу

Занятие 37. Оконные функции: функции ранжирования

📁 Блок: SQL / MySQL / Оконные функции ⏱️ Время изучения: ~90 мин 🎯 Сложность: Продвинутая
#row_number #rank #dense_rank #ntile #over #order #by #partition

⚡ Кратко: суть темы

Функции ранжированияROW_NUMBER, RANK, DENSE_RANK, NTILE — присваивают каждой строке номер или группу внутри окна, не сворачивая исходные строки.

  • ROW_NUMBER() — уникальный номер строки в порядке сортировки окна.
  • RANK() — ранг с пропусками при одинаковых значениях; DENSE_RANK() — ранг без пропусков.
  • NTILE(n) — разбивает строки на n примерно равных групп (квартиль, третиль и т.д.).

Что запомнить: все ранжирующие функции требуют ORDER BY внутри OVER; PARTITION BY нужен, когда ранжирование ведётся внутри групп.

Топ-3 ошибки: 1) путать RANK и DENSE_RANK; 2) забывать ORDER BY в окне; 3) фильтровать результат оконной функции в WHERE вместо подзапроса.

📖 О чём это занятие

Занятие посвящено ранжирующим оконным функциям. Мы научимся нумеровать строки, строить рейтинги товаров и сотрудников, заменять сложные подзапросы простым окном и делить выборку на равные группы с помощью NTILE.

Что изучим

📚 Что повторить перед изучением

🎯 Что изучать дальше

Следующее занятие — Занятие 38: Оконные функции: функции смещения и выбора.