题目描述
film表
| 字段 | 说明 |
|---|---|
| film_id | 电影id |
| title | 电影名称 |
| description | 电影描述信息 |
category表
| 字段 | 说明 |
|---|---|
| category_id | 电影分类id |
| name | 电影分类名称 |
| last_update | 电影分类最后更新时间 |
film_category表
| 字段 | 说明 |
|---|---|
| film_id | 电影id |
| category_id | 电影分类id |
| last_update | 电影id和分类id对应关系的最后更新时间 |
查找描述信息 (film.description) 中包含 robot 的电影对应的分类名称 (category.name) 以及电影数目 (count(film.film_id)) ,而且还需要该分类包含电影总数量 (count(film_category.category_id)) >=5 部。
考察知识点
内联结,GROUP BY, LOCATE()。
LOCATE(‘robot’,f.description):在 description 字段的数据中选取包含 robot 的行。
解题思路
根据题目的要求可以先在 film_category 表中查询电影总数量大于五部的 category_id 和电影数目 COUNT(film_id),然后将查询的结果和三张表连接起来,添加题中相应的条件。
SELECT c.name, COUNT(fc.film_id)
FROM film AS f, film_category AS fc, category AS c,
(SELECT category_id, COUNT(film_id) AS f_count
FROM film_category
GROUP BY category_id
HAVING COUNT(film_id) >= 5) AS cc
WHERE LOCATE('robot', f.description)
AND f.film_id=fc.film_id
AND fc.category_id=c.category_id
AND cc.category_id=c.category_id
题目来源:牛客网-SQL数据库实战题
✅ 每日打卡,❤ 点个赞再走吧!!!❤
后续会继续分享 Mysql 方面的文章,如果感兴趣的话可以点个关注不迷路哦~。
此篇博客讲解如何使用SQL进行练习,通过内联接、GROUP BY和LOCATE函数,找出描述中包含'robot'的电影,返回对应分类名称和电影数量,同时筛选出分类包含至少5部电影的情况。






