我有一张包含不同导演ID的许多电影的表格,我需要计算由相同导演ID制作的电影数量以及导演姓名的数量。
我的限制是仅显示制作了5部或更多电影的导演。我有2个单独的表,一个包含电影名称和主管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
答案列出“导演A”(导演10部电影)10次,“CNT”为10次,然后列表中的下一位是“导演B”(导演8部电影)8次“CNT”为8,然后“导演C”列出7次,依此类推......
我希望有:
Director Name: Number of Movies(CNT):没有重复,只列出了董事的名单和他们指导的电影数量。
"Director A" 10 "Director B" 8 "Director C" 7
请帮助!
答案 0 :(得分: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;
答案 1 :(得分: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
在分组后运行,因此您可以使用它来过滤记录数。
答案 2 :(得分:0)
因此,您基本上有两种选择:使用DISTINCT
关键字或使用GROUP BY
Director_name和HAVING COUNT(*)
。
DISTINCT
关键字指定从结果集中删除重复行。
最终结果将相同,但使用GROUP BY
代替DISTINCT
时效果会更好。