mysql - 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
但这仅返回演员出现的类别,而不是全部。非常感谢帮助`
解决方案
你想要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
是默认的排序顺序,所以不需要指定
推荐阅读
- php - 如何从服务器的 json 输出中打印 php 中的特定数据?
- java - Java:如何向作为图形节点的矩形添加名称?
- javascript - FullCalendar v4 - 时间显示选项
- python - TypeError: write() 只接受一个参数(给定 2 个)
- docker - 如何从 dockered pgadmin4 访问我的文件系统
- c# - 如何在结果视图 C# 中获取值?
- python - 流式传输帧序列的有效方法
- c++ - “operator()”在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- yii2 - 图片 url 在 yii2 中被视为页面请求
- laravel - 在 Windows IIS 服务器上重命名默认网站内的网站