Итак, у вас есть список фильмов, которые вы смотрите, а левый счетчик присоединяет его к списку всех фильмов:
SELECT * FROM
Movies m
LEFT JOIN
(select movieID, count(persID) as countwatch from watch group by persID) w
ON m.movieid = w.movieid
Левое объединение означает, что вы получаете все фильмы, связанные с количеством только тех, которые смотрят. Если фильм не просматривается, его столбец отсчета будет нулевым
Если вы хотите превратить ноль в 0, используйте COALESCE:
SELECT m.*, COALESCE(w.countwatch, 0) as countwatch FROM
Movies m
LEFT JOIN
(select movieID, count(persID) as countwatch from watch group by persID) w
ON m.movieid = w.movieid
Есть много способов, которыми мы могли бы выполнить этот запрос, но я специально выбрал этот способ, потому что он основывается на том, что вы уже сделали и знаете, и обрисовывает в общих чертах, как мы можем сгруппировать и обобщить данные на подуровне, а затем подключить их к больше данных на внешнем уровне
Это также полезно, потому что вы можете добавить некоторые дополнительные данные, например, из таблицы продаж, чтобы узнать, какие фильмы, которые вы смотрите, являются самыми прибыльными. Если вы выберете маршрут Салмана (который является правильным в этом контексте), вы столкнетесь с проблемами со статистикой, поскольку добавляете больше таблиц, потому что номера строк будут умножаться больше, чем вы ожидаете. Группируя, например, продажи и отслеживание в подзапросах, вы можете присоединить их к основной таблице, не вызывая дублирования строк (также называемых декартовым продуктом). В результате для запросов такого рода я склонен предлагать группирование и агрегирование в подзапросах, прежде чем объединять их с другими таблицами, чтобы сохранить соотношение 1: 1 между основной таблицей (фильмами) и выходными данными подзапросов (например, просмотр, продажа, количество актеров). и т. д.) которые содержат данные, относящиеся к основному фильму, но не обязательно связанные друг с другом