- 题目: 查找描述信息(film.description)中包含robot的电影对应的分类名称(category.name)以及电影数目(count(film.film_id)),而且还需要该分类包含电影总数量(count(film_category.category_id))>=5部
解题思路:
第一步:分解问题
将题目要求分解为3个:
1)查找film.description中有‘robot’的电影对应的分类名称(category.name),联结三表联结,采用where模糊查询;
2)根据film.film.id分组计数,其实就是统计符合第一步的电影数量
3)第一步筛选出来的电影分类中的电影总数量要多于5部,可作为where子查询中的过滤条件
根据思路书写代码
三表联结,where模糊查询
SELECT c.name AS '分类名称category.name' FROM film f INNER JOIN film_category fc ON f.film_id = fc.film_id INNER JOIN category c ON fc.category_id = c.category_id WHERE f.description LIKE '%robot%';
在第一步的基础上按film.film_id分组,这里因为film_id和name是一一对应的关系,同时考虑到后面select语句中没有出现film_id,所以采用c.name分组计数
SELECT c.name AS '分类名称category.name',COUNT(*) AS '电影数目count(film.film_id)' FROM film f INNER JOIN film_category fc ON f.film_id = fc.film_id INNER JOIN category c ON fc.category_id = c.category_id WHERE f.description LIKE '%robot%' GROUP BY c.name;
在第二步的基础上添加二where子查询的条件。
SELECT c.name AS '分类名称category.name',COUNT(*) AS '电影数目count(film.film_id)' FROM film f INNER JOIN film_category fc ON f.film_id = fc.film_id INNER JOIN category c ON fc.category_id = c.category_id WHERE f.description LIKE '%robot%' AND fc.category_id IN (SELECT category_id FROM film_category GROUP BY category_id HAVING COUNT(*) >=5) GROUP BY c.name;
如有错误欢迎评论区指出,感激不尽~