2013-10-23 176 views
2

考慮下面的電影數據庫:SQL查詢平均值

enter image description here

我試圖回答以下問題:

找到1980年以及之前公佈的平均收視電影的區別(請確保計算每部電影的平均評分,然後計算1980年以前的電影和之後的電影的平均評分,不要只計算1980年前後的整體平均評分。)

我寫了下面:

SELECT Movie.title, avg(Rating.stars), Movie.year 
FROM Movie 
INNER JOIN Rating ON Movie.mID = Rating.mID 
INNER JOIN Reviewer ON Reviewer.rID = Rating.rID  
GROUP BY Rating.mID, Movie.year 
ORDER BY year 

這使平均得分爲每部電影。我需要寫兩個子查詢才能得出1980年前後的平均值差異嗎?

+0

@dcaswell:固定。 – user2886760

+0

您的查詢結果是每年每部電影的平均評分(假設您的JOIN是正確的)。 –

+0

您可以使用某種類型的case語句在1980年之前/之後進行派生,然後對其進行分組。 – Andrew

回答

0

不要認爲使用case語句有任何問題。

SELECT 
avg(case when movie.year <= 1980 then Rating.stars else null end) as 'pre-1980 average', 
avg(case when movie.year > 1980 then Rating.stars else null end) as 'post-1980 average', 
from ... 

可以計算出從那裏的區別...這裏關鍵是使用的情況下空聲明的,平均不空計入值的總數(空不是0畢竟)。

編輯:您正在尋找對問題的一行響應權?擺脫你的選擇和分組中的movie.title和movie.year列。接近此:

SELECT 
avg(case when movie.year <= 1980 then Rating.stars else null) - 
avg(case when movie.year > 1980 then Rating.stars else null) as 'difference', 
from ...