- 题目: 查找描述信息(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;如有错误欢迎评论区指出,感激不尽~

京公网安备 11010502036488号