集团通过退货澄清

时间:2016-03-19 02:22:42

标签: sqlite

我正在完成斯坦福SQL课程,并遇到了这个问题:

对于每部电影,请返回标题和评分范围',即给予该电影的最高和最低评级之间的差异。按评分从最高到最低,然后按电影名称排序。

可以找到数据库结构和数据here

以下解决方案给出了正确的结果:

SELECT Movie.title,  max(Rating.stars)-min(Rating.stars) as spread
FROM Movie, Rating
WHERE Movie.mID = Rating.mID
GROUP BY Rating.mID
ORDER BY spread DESC, Movie.title ASC

我对它为何起作用感到困惑。我想" GROUP BY Rating.mID"会导致它只为每个唯一的Rating.mID(电影)返回一行,因此" max(Rating.stars)-min(Rating.stars)"不行。但似乎我错了,它正在电影的每组评级中找到正确的最大值和最小值。

有人可以解释GROUP BY是否真的每个唯一的Rating.mID只返回一行,还是每组都返回所有行但是在结果中是不可见的?

1 个答案:

答案 0 :(得分:1)

GROUP BY确实只为每个组返回一行。

但这只是SELECT的结果。 GROUP BY和SELECT子句是分开执行的:当GROUP BY将原始行分组为组时,它还在每个组中的所有行上运行聚合函数。