2012-08-16 59 views
0

我有許多電影都與不同的導演ID相關聯的表格,我需要統計由相同導演ID製作的電影數量以及該導演名稱是什麼。如何統計SQL中的事件而不創建重複項?

我的限制是只顯示製作5部或更多電影的導演。我有兩個獨立的表格,一個帶有電影名稱和導演ID,另一個帶有導演ID和導演名稱。

我想出基礎上,通過其他人的答案,這個網站上找下面的查詢:

Select A.Director_name, C.cnt 
from M_Movie B 
    Inner Join (select Director_ID, Director_Name 
    from M_Director) A on B.Director_ID = A.Director_ID 
     Inner Join (select Director_ID, count(Director_id) as cnt 
     from M_Movie 
     group by Director_ID) C on B.Director_ID = C.Director_ID 
where cnt >= 5 
order by cnt desc;

上面的代碼提供我通過列舉主任的姓名,他們執導的電影數量所需的答案。 - 但繼承人的問題...

Director Name:  Number of Movies(CNT):
"Director A" 10 "Director A" 10 "Director A" 10 "Director A" 10... (Happens 10 Times) "Director B" 8 "Director B" 8 "Director B" 8.... (Happens 8 Times) "Director C" 7

答案列表「導演」(誰導演10部電影),10倍的「CNT」爲10,然後在列表旁邊是「導演乙「(誰執導的電影8)8次的‘CNT’爲8,然後‘導演C’被列爲7倍等等...

我會非常想有:

 
Director Name:  Number of Movies(CNT):
"Director A" 10 "Director B" 8 "Director C" 7
由於沒有重複,只是董事名單和他們指導的電影數量。

請幫助!

回答

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; 
+0

你是我的救世主!謝謝!! – 2012-08-16 08:51:33

+0

我將如何加入第三張桌子? 如果說我想將「Director_name」更改爲名爲M_DireIncred的表中的「Director_First_name」? (此表保存「Director_name」,「Director_First_name」,「Director_Last_name」,「」Director_Age「) – 2012-08-16 09:58:55

+0

只是進行加入...'INNER JOIN M_DireIncred on a.Director_Name = M_direIncred.Director_Name' – podiluska 2012-08-16 10:00:28

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運行,因此你可以用它來過濾的記錄數。

0

所以你基本上有兩種選擇:使用DISTINCT關鍵字或GROUP BY Director_name與HAVING COUNT(*)DISTINCT關鍵字指定從結果集中刪除重複的行。 最終結果將是相同的,但使用GROUP BY而不是DISTINCT時性能會更好。

+0

DISTINCT會更好,在Director_name上有一個索引。 – inigomedina 2012-08-17 07:24:16

相關問題