mysql - 聚合函数如何影响与其一起查询的列?

标签 mysql sql database

我有 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)我只得到一行 movieTitlemax(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/

相关文章:

php - 如何在 mysql 中创建具有随机值(随机 6 数字唯一 - 作为序列键)的新列?

sql - Oracle regexp_substr 提取数据

数据库设计问题

mysql - 如何使用经典ASP将TIME格式化为HH :MM AM/PM format?

php - SQL PHP 检索特定商店的总金额

sql - 我应该使用 MSMQ 还是 SQL Service Broker 进行事务处理?

Mysql - 根据重复的 Table_1 值更新某些 Table_2 值

mysql - 如何检查我的 mysql 数据库是否导致速度变慢

mysql - 使用 INDEX 代替唯一索引是否会提高写入性能?

mysql - 将两个复杂的 SQL 查询合并为一个