MySQL:为什么我的答案不正确:哪部电影是2017年10月在卓别林会议室最常放映的电影?

问题描述 投票:-1回答:1

我刚开始学习MySQL课程,并且对join和sub-queries语句有点挣扎。

对于这个问题,我的答案为什么不正确?:

我的回应:

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;
mysql sql join group-by count
1个回答
1
投票

查询最显着的问题是它缺少GROUP BY子句,而它在COUNT()子句中具有聚合函数(SELECT)。这只是无效的SQL。基本上,如果要对行进行计数,则需要指定分组条件

此外,您还缺少ORDER BYLIMIT 1,这使您可以选择出现次数最多的电影(即,包含最多行的组)。

[SELECTFROM子句看起来不错-解决方案按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;
© www.soinside.com 2019 - 2024. All rights reserved.