我有 2 张 table :-
Movies(movieID,movieTitle,Director)
和
Rating(ratingID,movieID,movieRating,ratingDate)
现在我编写以下语法来查询这些表 -
SELECT movieTitle,max(movieRating)
FROM Movie M,Rating R
WHERE R.movieID = M.movieID
GROUPBY R.movieID;
我想问的是:
假设对于由 movieID
形成的每个子组我有一个独特的max(movieRating)
我只得到一行 movieTitle
和max(movieRating)
对于每个 movieID
子组。我不应该得到许多重复的 movieTitle
行吗?和max(movieRating)
有多少次 movieTitle
表中存在条目吗?
让我用一个例子来说明我的疑问 -
假设我的条目如下(我只包含了相关的条目):
movieID movieTitle movieRating
1 Lost Stars 3
1 Lost Stars 4
1 Lost Stars 5
当我对这些值运行查询时,我得到
Lost Stars 5
作为答案。即该行仅作为答案返回一次。
我不应该 -
Lost Stars 5
Lost Stars 5
Lost Stars 5
作为答案。
那我不应该获取该值 3 次(每次表中存在 Lost Stars
条目时)吗?
您能解释一下为什么它会以这种方式工作吗?
我是 SQL 新手,如果这是一个非常基本的疑问,我深表歉意。我非常感谢我能得到的任何帮助。
最佳答案
GROUP BY 将对记录进行分组并返回不同的值。在您的情况下,所有记录都共享相同的电影标题和 ID。唯一不同的值是评级,您请求的是最大值,而不是与每条记录关联的实际评级。
将您的结果与以下结果进行比较:
SELECT R.movieTitle,M.movieRating,max(M.movieRating)
FROM Movie M,Rating R
WHERE R.movieID = M.movieID
GROUP BY R.movieID, R.movieTitle, M.movieRating;
注意:您必须按 select 子句中非聚合的任何字段进行分组,因此如果您选择它,则必须按 movieTitle 进行分组。
该查询的结果将为您提供全部 3 条记录,因为它选择的是 movieRating 值,该值在所有记录上都不同。
关于mysql - 聚合函数如何影响与其一起查询的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35158981/