0

さまざまな監督IDに関連付けられた多くの映画のテーブルがあります。同じ監督IDで作成された映画の数と、その監督の名前を数える必要があります。

私の制限は、5本以上の映画を作った監督だけを表示することです。私は2つの別々のテーブルを持っています。1つは映画の名前と監督のIDを持ち、もう1つは監督のIDと監督の名前を持っています。

私はこのウェブサイトで他の人々の答えを調べたことに基づいて次の質問を思いついた:

A.Director_name、C.cntを選択します
M_MovieBから
    内部結合(Director_ID、Director_Nameを選択)
    M_Directorから)A on B.Director_ID = A.Director_ID
        内部結合(Director_IDを選択、cntとしてcount(Director_id)
        M_Movieから
        Director_IDによるグループ化)C on B.Director_ID = C.Director_ID
ここで、cnt> = 5
cntdescによる注文;

上記のコードは、監督の名前と監督した映画の数をリストすることで、希望する答えを提供してくれます。-しかし、ここに問題があります...

監督名:映画数(CNT):
「ディレクターA」10 「ディレクターA」10 「ディレクターA」10 「ディレクターA」10...(10回発生) 「監督B」8 「監督B」8 「監督B」8....(8回発生) 「監督C」7

答えは、「CNT」を10として「監督A」(10本の映画を監督)を10回リストし、次に「CNT」を8として「監督B」(8本の映画を監督)を8回リストします。そして、「ディレクターC」が7回リストされます。

私は理想的には持っていたいです:

監督名:映画数(CNT):
「ディレクターA」10 「監督B」8 「監督C」7
繰り返しはなく、監督の名前と監督した映画の数だけがリストされています。

助けてください!

4

3 に答える 3

2

簡単な答えはDISTINCT、クエリにを追加することです

Select DISTINCT A.Director_name, C.cnt

ただし、それを回避するためにクエリを書き直すこともできます。何かのようなもの...

Select A.Director_name, count(B.MovieID)
from M_Movie B 
    Inner Join 
    M_Director A 
        on B.Director_ID = A.Director_ID
group by a.Director_Name
having count(b.MovieID) >=5 
order by count(b.MovieID)  desc;
于 2012-08-16T08:23:30.230 に答える
0

したがって、基本的に2つのオプションがあります。DISTINCTキーワードを使用するか、GROUP BYDirector_nameに。を指定しHAVING COUNT(*)ます。キーワードはDISTINCT、結果セットから重複する行を削除することを指定します。GROUP BY最終結果は同じになりますが、の代わりに使用するとパフォーマンスが向上しますDISTINCT

于 2012-08-16T08:30:28.600 に答える
0

あなたはこのようにそれを行うことができます:

SELECT Director_Name, COUNT(*) as [Count]
FROM M_Movie m
JOIN M_Director d on m.Director_ID = d.Director_ID
GROUP BY Director_Name
HAVING COUNT(*) >= 5

グループ化後に実行されるため、これHAVINGを使用してレコード数をフィルタリングできます。

于 2012-08-16T08:23:44.140 に答える