← К оглавлению занятия

📝 Задания

📁 Блок: SQL / MySQL / Оконные функции ⏱️ Время изучения: ~60 мин 🎯 Сложность: Повторение

⚡ Кратко: задания

Summary session 10 повторяет два блока оконных функций: ранжирование и смещение/выбор.

Для ранжирования используем ROW_NUMBER, RANK, DENSE_RANK, NTILE.

Для сравнения соседних строк используем LAG и LEAD; для крайних значений — FIRST_VALUE и LAST_VALUE.

Минимальный пример: DENSE_RANK() OVER (ORDER BY quantity DESC) строит рейтинг по количеству, а LAG(date_received) OVER (ORDER BY date_received) находит предыдущую дату.

Топ-3 ошибки: путать RANK и DENSE_RANK, забывать ORDER BY в окне, фильтровать результат окна до внешнего SELECT.

📝 Практические задания

1

Завершить практикум 10

Доработайте задачи из занятия 39, если они не были завершены на занятии.

2

Определить функцию по формулировке

Для каждой формулировки выберите функцию: предыдущая дата, топ-5, 13-я строка, минимальная цена заказа, квартиль продаж.

3

Сравнить RANK и DENSE_RANK

Покажите на примере, почему RANK может пропускать номер, а DENSE_RANK — нет.

4

Разобрать домашнее задание 10

Повторите запросы по purchase_order_details: соседние inventory_id, минимум/максимум цены, ранги quantity.

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Какая функция даёт уникальный номер строки?

Вопрос 2

Какая функция возвращает предыдущую строку окна?

Вопрос 3

Чем DENSE_RANK отличается от RANK?

Вопрос 4

Что делает NTILE(4)?

Вопрос 5

Какая функция подходит для следующей даты?

Вопрос 6

Где фильтровать rank <= 10?

Вопрос 7

Когда FIRST_VALUE вернёт минимальную цену?

Вопрос 8

Что определяет PARTITION BY?