0

スキーマに従う必要があります

Movie(mvID, title, rating, year)
Director(directorID, firstname, lastname)
Genre(mvID*, genre)
Direct(mvID*, directorID*)

コメディー ジャンルの映画を最も多く監督した監督を知り、そのジャンルで何本の映画を制作したかをカウントして詳細を出力する必要があります。

ので、私は持っています

SELECT Director.DirectorID, Director.FirstName, Director.LastName, COUNT(*)
FROM Direct, Genre, Director
WHERE Direct.mvID = Genre.mvID
AND Genre.genre = 'Comedy'
AND Direct.DirectorID = Director.DirectorID
AND COUNT(*) > ALL
GROUP BY Director.DirectorID, Director.FirstName, Director.LastName

しかし、グループ機能が許可されていないというエラーが表示されます。

4

2 に答える 2

1

まず、監督とジャンル別にカウントを取得します。

SELECT directorID, genre, COUNT(*) num_movies
FROM Movie JOIN Genre
ON Movie.mvID = Genre.mvID
JOIN Direct
ON Movie.mvID = Direct.mvID
GROUP BY directorID, genre

次に、監督をジャンル別にランク付けします。

SELECT
   directorID, genre,
   DENSE_RANK() OVER(PARTITION BY genre order by num_movies desc) rank
FROM
(SELECT directorID, genre, COUNT(*) num_movies
FROM Movie JOIN Genre
ON Movie.mvID = Genre.mvID
JOIN Direct
ON Movie.mvID = Direct.mvID
GROUP BY directorID, genre) X

次に、ジャンル別のトップ ディレクターを取得します。

SELECT directorID, genre
FROM (SELECT
   directorID, genre,
   DENSE_RANK() OVER(PARTITION BY genre order by num_movies desc) rank
   FROM
      (SELECT directorID, genre, COUNT(*) num_movies
       FROM Movie JOIN Genre
       ON Movie.mvID = Genre.mvID
       JOIN Direct
       ON Movie.mvID = Direct.mvID
       GROUP BY directorID, genre) )
WHERE rank=1

KEEP と FIRST を使用する別の方法がありますが、個人的には KEEP...FIRST/LAST の構文は混乱しすぎます。

于 2013-10-13T12:15:21.897 に答える