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
ORDER by COUNT(*) DESC

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

4

2 に答える 2

0

以下のSQLはあなたの問題を解決します:

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     rownum = 1
GROUP BY    Director.DirectorID, Director.FirstName, Director.LastName
order by    COUNT(*) DESC

具体的には、これはテーブルを結合し、ジャンル「コメディ」の映画について各監督が監督した映画をカウントします。次に、カウントの降順で行をソートし、最初の行を取得します。

多<->多関係が 2 つあることに注意してください。そのため、コメディだけを見ていない場合 (つまり、これを複数のジャンルにわたって実行した場合) は、おそらく別の手法 (つまり、複数の一時テーブルまたは同様の仮想集計) を使用する必要があります。 SQLで「二重カウント」を行わないようにするために...

また、2 人の監督がこのジャンルの映画の数が同じである場合、1 行だけが返されることにも注意してください。喜劇の数が同じすべての監督を返す場合は、SQL を少し変更する必要があります。

乾杯、ノア・ウォロウィック

于 2013-10-12T13:19:06.220 に答える