![](/img/trans.png)
[英]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.