簡體   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