mysql:why was 我的回答不正确:哪部电影在2017年10月最常在卓别林房间放映?

5anewei6  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(199)

我刚作为一个初学者完成了mysql课程,并对join和sub查询语句进行了一些尝试。
关于这个问题,为什么我的回答不正确
我的回答是:

SELECT f.name, r.name, COUNT(s.room_id) AS film_times FROM films f
JOIN screenings s ON f.id = s.film_id  
JOIN rooms r ON s.room_id = r.id
WHERE r.name = 'Chaplin';

解决方案:

SELECT f.name, r.name, COUNT(r.name) AS film FROM films f
JOIN screenings s ON f.id = s.film_id  
JOIN rooms r ON s.room_id = r.id
WHERE r.id = 1
GROUP BY f.name
ORDER BY film DESC
LIMIT 1;
omvjsjqw

omvjsjqw1#

查询中最显著的问题是缺少 GROUP BY 子句,而它具有聚合函数( COUNT() )在 SELECT 条款。这只是无效的sql。基本上,如果要计算行数,需要指定分组条件
而且,你错过了 ORDER BY 以及 LIMIT 1 ,可以选择出现次数最多的胶片(即包含最多行的组)。
这个 SELECT 以及 FROM 条款看起来很好-解决方案按房间过滤 id 当你过滤的时候 name ,但两者都应该可以(只要没有重复的房间名称)。
最后,让我指出这个解决方案是有缺陷的:不是所有的非聚合列都出现在 GROUP BY 子句,而这是一个常见的sql需求(尽管mysql的旧版本对此不严格)。此外,它是按电影名称分组的,如果两部不同的电影有相同的名称,这(再一次)打开了问题的可能性。最好用以下措辞:

SELECT f.name, r.name, COUNT(*) AS no_occurences FROM films f
JOIN screenings s ON f.id = s.film_id  
JOIN rooms r ON s.room_id = r.id
WHERE r.id = 1
GROUP BY f.film_d, f.name, r.name
ORDER BY no_occurences DESC
LIMIT 1;

相关问题