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

✅ Решения

📁 Блок: Revision / MySQL и Colab ⏱️ Время изучения: ~90 мин 🎯 Сложность: Повторение

⚡ Кратко: суть занятия

Revision 1 повторяет подключение MySQL из Python и практику SQL по базе sakila.

В Python используется mysql-connector-python: подключение, cursor, execute, fetchall, description, DataFrame и close.

SQL-повторение начинается с поиска фильмов по LIKE "%LION%" и подсчёта таких фильмов.

JOIN film, film_category и category нужен для вывода фильмов с категориями.

ORDER BY length DESC LIMIT 10 показывает самые длинные фильмы.

GROUP BY category и HAVING фильтруют категории по количеству фильмов.

Оконные функции AVG(...) OVER (PARTITION BY name) и DENSE_RANK() OVER (...) добавляют агрегаты без схлопывания строк.

Топ-3 ошибки: забыть закрыть соединение, фильтровать Horror по неверному category_id, путать GROUP BY и оконную агрегацию.

Решения и разбор шагов

Подключение

Установите mysql-connector-python, создайте connection, cursor, выполните SQL и закройте соединение.

DataFrame

rows = cursor.fetchall(); columns = [col[0] for col in cursor.description]; pd.DataFrame(rows, columns=columns).

LION

WHERE title LIKE "%LION%"; для количества используйте COUNT(*).

Horror

JOIN film_category по film_id и фильтр category_id = 11, как указано в источнике.

Категории

Добавьте JOIN category ON category.category_id = film_category.category_id.

Топ длины

ORDER BY length DESC LIMIT 10.

GROUP BY

Группируйте по c.name и считайте COUNT(f.title).

HAVING

После GROUP BY добавьте HAVING films > 20 или другой порог, который требуется в задании.

Окна

AVG(length) OVER (PARTITION BY c.name) не схлопывает строки, а добавляет агрегат к каждой строке.

Ранг

DENSE_RANK() OVER (ORDER BY length DESC) ранжирует фильмы по длине.