• 题目: 查找描述信息(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;

如有错误欢迎评论区指出,感激不尽~