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

🐛 Ошибки

📁 Блок: 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. Функция выбрана по названию, а не по задаче

Симптом: Для топа используют ROW_NUMBER, хотя нужны равные места.

Исправление: Если одинаковые значения должны делить место, используйте RANK или DENSE_RANK.

Ошибка 2. Одинаковое окно копируют везде

Симптом: Для LAG нужен PARTITION BY product_id, а для общего топа — нет.

Исправление: Задавайте окно под конкретную функцию.

Ошибка 3. NTH_VALUE воспринимают как LIMIT

Симптом: Ожидают, что функция оставит только n-ю строку.

Исправление: NTH_VALUE добавляет значение в столбец, а не фильтрует строки.

Ошибка 4. Домашний фильтр rank <= 10 делают сразу в WHERE

Симптом: Псевдоним ранга недоступен.

Исправление: Используйте CTE.