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
select d.firstname,d.lastname,count(g.mvId)
from Director d
inner join Direct dr on d.directorId=dr.directorId
inner join Genre g on dr.mvId=g.mvId
where g.genre='comedy'
group by d.firstname
having count(g.mvId)=max(g.mvId)
于 2013-10-12T13:31:37.353 回答
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

具体来说,这会加入表格并计算每个导演导演的电影类型为“喜剧”的电影。然后它按计数的降序对行进行排序并抓取第一行。

请注意,您有两个 many<->many 关系,因此如果您不只是看喜剧(即,如果您跨多种类型运行),您可能必须使用不同的技术(即多个临时表或类似的虚拟聚合)为了在你的 SQL 中没有'重复计算......

另请注意,如果两位导演对该类型的电影数量相同,则只会带回一行。如果您希望返回具有相同喜剧数量的所有导演,则必须稍微修改 sql。

干杯,诺亚沃洛维克

于 2013-10-12T13:19:06.220 回答