方法一:连接了3张表,其中一张是虚拟表,做出来了。下面第2种方法使用select后的子查询更容易理解,但是最后一个字段无法隐藏,实际工作中可以用,逻辑是对的,想要解题只能是方法一。

方式1:

SELECT count_all.name,count(*)
from (
    SELECT c.category_id,c.name,count(*)
    from film f
    inner join film_category fc
    on fc.film_id=f.film_id
    inner join category c
    on c.category_id=fc.category_id
    group by c.name
    HAVING count(*)>=5
) count_all
inner join film_category fc
on fc.category_id=count_all.category_id
inner join film f 
on fc.film_id=f.film_id
where f.description like '%robot%';

方式2:

SELECT c.name,count(*),(
            SELECT count(*)
            from film f
            inner join film_category fc
            on fc.film_id=f.film_id
            inner join category c
            on c.category_id=fc.category_id
            group by c.name
            HAVING count(*)>=5
) count_a
from film f
inner join film_category fc
on fc.film_id=f.film_id
inner join category c
on c.category_id=fc.category_id
where f.description like '%robot%'
group by c.name
HAVING count_a>=5;