Наиболее заметная проблема с вашим запросом состоит в том, что в нем отсутствует предложение GROUP BY
, а в предложении SELECT
есть агрегатная функция (COUNT()
). Это просто неверный SQL. По сути, если вы хотите подсчитать строки, вам нужно указать критерии группировки
Кроме того, вам не хватает ORDER BY
и LIMIT 1
, которые позволяют выбрать фильм с наибольшим количеством случаев (то есть группы, содержащей большинство строк).
Предложения SELECT
и FROM
выглядят хорошо - решение фильтрует комнаты по id
, а вы фильтруете по name
, но оба должны быть в порядке (при условии, что
Наконец, позвольте мне указать, что это решение некорректно: не все неагрегированные столбцы появляются в предложении GROUP BY
, хотя это обычное требование SQL ( хотя в старых версиях MySQL это не так). Кроме того, это группировка по названию фильмов, что (опять же) открывает возможность проблем, если два разных фильма имеют одинаковое имя. Это лучше было бы сформулировать:
SELECT f.name, r.name, COUNT(*) AS no_occurences FROM films f
JOIN screenings s ON f.id = s.film_id
JOIN rooms r ON s.room_id = r.id
WHERE r.id = 1
GROUP BY f.film_d, f.name, r.name
ORDER BY no_occurences DESC
LIMIT 1;