繁体   English   中英

SQL:列必须出现在 GROUP BY 子句中或在聚合函数中使用

[英]SQL: Column Must Appear in the GROUP BY Clause Or Be Used in an Aggregate Function

我正在做我期望的对 imdb 数据库的修改版本的相当简单的查询:

select primary_name, release_year, max(rating)
from titles natural join primary_names natural join title_ratings
group by year
having title_category = 'film' and year > 1989;

但是,我立即遇到

“列必须出现在 GROUP BY 子句中或用于聚合函数中。”

我试过对此进行研究,但得到的信息令人困惑; 我为这个问题找到的一些示例在结构上与我的相同,其中其他示例指出您必须对每个选定的参数进行分组,这违背了组的全部目的,因为我只想选择每年的最大条目。

这个查询我做错了什么?

预期结果:包含 3 列的表格显示每年评分最高的电影。

如果你想要每年的最大条目数,那么你应该这样做:

select r.*
from ratings r
where r.rating = (select max(r2.rating) where r2.year = r.year) and
      r.year > 1989;

换句话说, group by是编写此查询的错误方法。

我还强烈建议您完全忘记natural join的存在。 这是可憎的。 它使用连接的公共列的名称 它甚至不使用正确声明的外键关系。 此外,您看不到连接使用了哪些列。

当我这样做时,另一条建议是:限定具有多个表引用的查询中的所有列名。 即,在列名中包含表别名。

如果您想显示所有列,您可以使用窗口函数,例如:

select primary_name, year, max(rating) Over (Partition by year) as rating
from titles natural 
join primary_names natural join ratings
where title_type = 'film' and year > 1989;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM