2016-04-06 10 views
0

私は次のようになり、映画の格付けサイトのテーブルがあります。映画レビューサイト

  • 映画(MOVIEID、タイトル、年)
  • 評価(ReviewerID、MOVIEID、評価)
  • レビューを(レビュー者ID、名前)

そして最も寛大な査読者の好きな映画の名前を示す質問を書いてみたいと思います。

校閲者の好きな映画の名前-finding:

SELECT reviewerID, AVG(rating) AS avg_rating 
FROM Ratings 
GROUP BY reviewerID 
ORDER BY avg_rating DESC LIMIT 1 

しかし、私は」:最大平均評価-finding

SELECT DISTINCT Title FROM Movies 
NATURAL JOIN Ratings 
WHERE rating IN (SELECT MAX(rating) FROM Ratings) 

を現時点では私は2つの部分にタスクを分解しています私はこれらの2つのクエリをどのように接続できるかわかりません。サブクエリを使用すると、サブクエリ内でLIMITを使用できないため、機能しません。 誰もこの2つのクエリを接続する方法を知っていますか? またはサブクエリを使用しない方法かもしれませんか?

+0

のようなもの:あなたはまだ行っていない場合、適切なのDDLを提供(および/または1 sqlfiddle)を使用すると、問題をより簡単に複製できます。 2.まだ実行していない場合は、手順1で提供された情報に対応する結果セットを指定してください。 – Strawberry

+0

は宿題のような疑わしい音です。すべてのサブクエリをテストしましたか?つまり、各レビューアの平均のリストを取得していますか?あなたは最高の平均で査読者を得ることができますか?等 – pancho018

+0

申し訳ありません私のテーブルとクエリは一貫していませんでした。私はそれらを修正し、詳細を追加しました。平均評価は、レビューアが提供したすべての評価の平均であるため、レビューアは映画ごとに1つの評価しか投稿できませんが、複数の映画を評価することができます。 – Minami

答えて

0
SELECT m.title 
    FROM movies m 
    JOIN ratings r 
    ON r.movieid = m.movieid 
    JOIN 
    (SELECT reviewerID 
     FROM Ratings 
     GROUP 
      BY reviewerID 
     ORDER 
      BY AVG(rating) DESC 
     LIMIT 1 
    ) x 
    ON x.reviewerid = r.reviewerid 
ORDER 
    BY r.rating DESC 
LIMIT 5; 

またはあなたが好きな場合は、アクションのこの単純な二段階のコース以下検討することを

0

あなたがそのような何かしようとしました:ここ

SELECT Title FROM Movies 
WHERE movieID = (
    SELECT movieID FROM Ratings WHERE reviewerID=(
     SELECT reviewerID, AVG(rating) AS avg_rating 
     FROM Ratings 
     GROUP BY reviewerID 
     ORDER BY avg_rating DESC LIMIT 1 
    ) 
    ORDER BY rating DESC 
    LIMIT 1 
); 
0

GROUP BYORDER BYLIMIT 1を使用したソリューションです。

SELECT m.Title 
FROM Movies as m INNER JOIN Ratings as r USING(movieID) 
GROUP BY m.movieID 
ORDER BY AVG(r.rating) DESC 
LIMIT 1 
関連する問題