2

次の映画データベースを検討してください。

ここに画像の説明を入力

次の問題に答えようとしています。

1980 年以前に公開された映画の平均評価と 1980 年以降に公開された映画の平均評価の差を見つけてください。 t は、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 年前後の平均値の差を取得するには、2 つのサブクエリを作成する必要がありますか?

4

1 に答える 1

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 ...

そこから差を計算できます... ここで重要なのは、case ステートメントで null を使用することです。

編集:質問に対する1行の回答を探していますか?そのための選択とグループ化で 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 ...
于 2013-10-23T23:37:32.010 に答える