[英]SQL: Must appear in the GROUP BY clause or be used in an aggregate function
[英]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.