MySQL Sakila DB,获取类别列表,并统计哪位演员出现最多

MySQL Sakila DB,获取类别列表,并统计哪位演员出现最多,mysql,sql,count,left-join,where-clause,Mysql,Sql,Count,Left Join,Where Clause,所以我在学习MySQL,使用Sakila DB。结构简单,, 表:演员、演员、电影、电影类别、类别 我需要得到所有类别的列表,并计算演员在每个类别中出现的次数。如果为0次,则显示行“操作”“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

所以我在学习MySQL,使用Sakila DB。结构简单,, 表:演员、演员、电影、电影类别、类别

我需要得到所有类别的列表,并计算演员在每个类别中出现的次数。如果为0次,则显示行“操作”“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
但这只返回演员出现的类别,而不是所有类别。 非常感谢你的帮助
`

您想要
左连接
s:

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
注:

  • 参与者的筛选必须转到相关的
    join
    on
    子句,否则它会筛选出给定参与者未出现的类别

  • 因此,您需要依赖于来自actor表的列

  • asc
    是默认排序顺序,因此无需指定它