28.【较难】查找描述信息中包含robot的电影对应的分类名称以及电影数目,而且还需要该分类包含电影总数量>=5部

查找描述信息中包含robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部

http://www.nowcoder.com/questionTerminal/3a303a39cc40489b99a7e1867e6507c5

一开始我是这样写

select c.name as '分类名称category.name',
       count(f.film_id) as '电影数目count(film.film_id)'
from film f,category c,film_category fc
where f.film_id=fc.film_id
and fc.category_id=c.category_id
and f.description like '%robot%'
group by c.name
having count(fc.category_id)>=5

很显然对蓝色标记部分理解不对
图片说明
应该先找到每个电影分类下电影总数量大于5的category_id,修改如下

正确代码

select c.name,
       count(fc.film_id)
from film f,category c,film_category fc
where f.description like '%robot%'
and f.film_id=fc.film_id
and fc.category_id=c.category_id
and c.category_id in (select category_id
                      from film_category
                      group by category_id
                       having count(film_id)>=5)
数据分析阿宇君的SQL题解 文章被收录于专栏

数据分析的SQL题目

全部评论
这题较难不是因为思路难,是因为题目不好理解,这是语文题啊
12 回复 分享
发布于 2021-04-08 09:44
为什么最后不加:group by fc.category_id?
7 回复 分享
发布于 2020-10-11 21:13
个人理解,这个题关键在于理解语句执行的先后顺序,先where再groupby:如果where和groupby并列,也就是第一种答案,会先执行where的过滤条件,使得groupby里的having不对;having是先决条件
4 回复 分享
发布于 2020-11-26 12:37
是不是少了group by c.name;
3 回复 分享
发布于 2021-03-22 10:36
因为题目要求的是, 分类的电影总数>=5, 这个条件是先决条件,根据这个条件筛选出符合的,然后再添加其他筛选条件
3 回复 分享
发布于 2020-09-26 08:59
还是不懂,请问这两个输出结果有什么不同
2 回复 分享
发布于 2020-11-21 09:08
答案似乎是不对的。如果有两部电影带有“robot”,属于不同电影的类别,且都符合“该类电影>=5”这个条件,那么select count(fc.film_id)这一句,就必须有分组(电影类别)条件限制才行,否则就把不同分类的film_id 统计在一起了。 为了作验证,我们可以把题目要求改为:选出“电影描述含有Ancient字样”(f.description like '%Ancient%')、符合条件电影的类别只要求1部即可——题目所给出的样表中,满足上述两个条件的电影有4部、分别属于3个类别;用作者原代码按以上条件修改,则变成了: select c.name, count(fc.film_id) from film f,category c,film_category fc where f.description like '%Ancient%' and f.film_id=fc.film_id and fc.category_id=c.category_id and c.category_id in (select category_id from film_category group by category_id having count(film_id)>=1) 可是,运行出来的结果是:horror 4; 以上horror(恐怖片),是满足条件的三个类别的第一个;4,是三个类别电影的总数;
1 回复 分享
发布于 2020-12-26 22:23
where语句会筛选掉一部分进而导致原本符合having条件的被去掉,所以要先执行>=5这个条件
2 回复 分享
发布于 2021-08-11 21:17
请问为什么把第一种写法的having count(fc.category_id)>=5改成having count(film_id)>=5也不对呢
点赞 回复 分享
发布于 2020-09-17 11:23

相关推荐

昨天 18:54
门头沟学院 Java
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
74 3 评论
分享
牛客网
牛客企业服务