首页 > 解决方案 > MySQL Sakila DB,获取类别列表并计算出现次数最多的演员

问题描述

所以我正在使用 Sakila DB 学习 MySQL。结构很简单,Tables:actors、actors_films、films、film_categories、categories。

我需要获取所有类别的列表,并计算 Actor 在每个类别中出现的次数。如果为0次,则显示行“actions”“0”。

尝试这个查询:`

SELECT c2.name genre, COUNT(c2.name) appear 
FROM category c2 
JOIN film_category fc ON c2.category_id = fc.category_id 
JOIN film_actor fa ON fc.film_id = fa.film_id 
JOIN actor a ON fa.actor_id = a.actor_id 
WHERE a.actor_id = 1
GROUP by c2.name, c2.category_id
ORDER by appear ASC

但这仅返回演员出现的类别,而不是全部。非常感谢帮助`

标签: mysqlsqlcountleft-joinwhere-clause

解决方案


你想要left join

SELECT c.name genre, COUNT(a.actor_id) appear 
FROM category c 
LEFT JOIN film_category fc ON c.category_id = fc.category_id 
LEFT JOIN film_actor fa ON fc.film_id = fa.film_id 
LEFT JOIN actor a ON fa.actor_id = a.actor_id AND a.actor_id = 1
GROUP by c.name, c.category_id
ORDER by appear

笔记:

  • 演员的过滤必须去相关的on子句join,否则它会过滤掉给定演员没有出现的类别

  • 因此,您需要依靠来自演员表的列

  • asc是默认的排序顺序,所以不需要指定


推荐阅读