クエリを書く必要があります:
1980 年以前に公開された映画の平均評価と 1980 年以降に公開された映画の平均評価の差を見つけてください。 t は、1980 年前後の全体的な平均評価を計算するだけです。)
スキーマは次のとおりです。
Movie ( mID, title, year, director )
English: There is a movie with
ID number mID, a title, a release year, and a director.
Reviewer ( rID, name )
English: The reviewer with ID number rID has a certain name.
Rating ( rID, mID, stars, ratingDate )
English: The reviewer rID gave the movie mID a
number of stars rating (1-5) on a certain ratingDate.
以下は私が思いついたクエリです。結果は正しいですが、間違いなくあまり良いクエリではありません:
select t1.p1-t2.p2 from
(select avg(average) as p1 from
(select g.mid,g.average, year from
(select mid, avg(stars) as average from rating
group by mid) g, movie
where g.mid=movie.mid) j
where year >= 1980) t1,
(select avg(average) as p2 from
(select g.mid,g.average, year from
(select mid, avg(stars) as average from rating
group by mid) g, movie
where g.mid=movie.mid) j
where year < 1980) t2;
以下は、私がこのクエリにたどり着いた方法です。まず、映画 ID、その映画の平均評価、映画の年を取得する次のサブクエリを作成しました。
select g.mid,g.average, year from
(select mid, avg(stars) as average from rating
group by mid) g, movie
where g.mid=movie.mid
ここで、同じサブクエリを使用して 2 つのテーブルを作成する必要があります。最初のテーブルには 1980 年以降の映画の評価の平均が含まれます。2 番目のテーブルには 1980 年以前の映画の評価の平均が含まれます。最上位のクエリでは、これら 2 つの値を減算します。
問題は、同じコードを 2 か所で複製していることです。コードの重複とパフォーマンスの観点からコードを最適化するのを手伝ってもらえますか?