この質問に正しく答えるクエリがあります: 平均評価が最も高い映画の名前は?
select title
from (
select movies.title, avg(rating) avgrating
from movies, rentals
where movies.movieid = rentals.movieid
group by movies.title
) a
where avgrating = (select max(avgrating)
from (select movies.title, avg(rating) avgrating
from movies, rentals
where movies.movieid=rentals.movieid
group by movies.title) b)
order by title desc
唯一の問題は、私の大規模なデータベースで実行するのに数分かかることです。これを速くする方法が思い浮かびません。基本的にサブクエリ a と b は同等ですが、私が知る限り、where 句は「a」サブクエリを参照できないため、これを繰り返さなければなりません。重要: 最高の平均評価が同点になる可能性があり、クエリは同点の数のタイトルを返す必要があります。 また、タイトルは映画テーブルにあり、評価はレンタル テーブルにあるため、結合が必要であることにも注意してください。
Movies (
movieId INTEGER PRIMARY KEY,
title TEXT,
year INTEGER
)
Rentals (
cardNo INTEGER,
movieId INTEGER,
date DATE,
rating INTEGER,
PRIMARY KEY(cardNo, movieID, date),
FOREIGN KEY (cardNo) REFERENCES Customers,
FOREIGN KEY (movieId) REFERENCES Movies
)