0

我有一张包含许多与不同导演 ID 相关联的电影的表格,我需要计算由相同导演 ID 制作的电影的数量以及该导演的名字是什么。

我的限制是只显示制作了 5 部电影或更多电影的导演。我有 2 个单独的表,一个包含电影名称和导演 ID,另一个包含导演 ID 和导演姓名。

根据查看本网站上其他人的答案,我提出了以下查询:

选择 A.Director_name、C.cnt
来自 M_Movie B
    内连接(选择 Director_ID、Director_Name
    来自 M_Director) A 上 B.Director_ID = A.Director_ID
        Inner Join (select Director_ID, count(Director_id) as cnt
        来自 M_Movie
        按 Director_ID 分组)C 上 B.Director_ID = C.Director_ID
其中cnt >= 5
按cnt desc排序;

上面的代码通过列出导演的姓名和他们导演的电影数量为我提供了所需的答案。- 但继承人的问题...

导演姓名: 电影数量(CNT):
《A导演》10 《A导演》10 《A导演》10 《A主任》10...(发生10次) 《B主任》8 《B主任》8 “B主任”8....(发生8次) 《C主任》7

答案列出了“导演A”(导演了10部电影)10次,“CNT”为10,然后列表中的下一个是“导演B”(导演了8部电影)8次,“CNT”为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

你可以这样做:

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 回答
0

因此,您基本上有两个选择:使用DISTINCT关键字或GROUP BYDirector_name 与HAVING COUNT(*). 关键字指定从结果DISTINCT集中删除重复行。最终结果将是相同的,但使用GROUP BY而不是DISTINCT.

于 2012-08-16T08:30:28.600 回答