Пример решения запроса с Left join, правильно или нет?
Задача: Необходимо сделать статистику по категориям фильмов в итоговой таблице по 2 полям - категория и число фильмов категории. Число фильмов из категории отбираем по условию актер и актрис, которые снимались больше 7 раз и в фильмах после 2013г. Назвать name_category и total_films соответственно + выполнить сортировку по кол-ву фильмов от большего к меньшему и потом по полю с названием категории в лексикографическом порядке.
Просьба пояснить правильность составления запроса или как его можно улучшить, можно ли соединять таблицы напрямую? Пример решения:
SELECT c.name AS name_category,
COUNT(DISTINCT m.film_id) AS total_films
FROM movie AS m LEFT JOIN film_actor AS fa ON fa.film_id=m.film_id
LEFT JOIN actor AS a ON a.actor_id=fa.actor_id
LEFT JOIN film_category AS fc ON m.film_id=fc.film_id
LEFT JOIN category AS c ON c.category_id=fc.category_id
WHERE a.actor_id IN (SELECT a.actor_id
FROM movie AS m LEFT JOIN film_actor AS fa ON fa.film_id=m.film_id
LEFT JOIN actor AS a ON a.actor_id=fa.actor_id
WHERE m.release_year > 2013
GROUP BY a.actor_id
HAVING COUNT(a.actor_id)>7)
GROUP BY name
ORDER BY total_films DESC, name_category;
Источник: Stack Overflow на русском