我必须遵循架构
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
但我收到一个 group function not allowed 错误。
下面的 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
具体来说,这会连接表格并计算每个导演执导的“喜剧”类型电影的电影数量。然后,它按计数降序对行进行排序并获取第一行。
请注意,您有两个许多许多关系,因此如果您不仅仅看喜剧(即,如果您跨多种类型运行此内容),您可能必须使用不同的技术(即多个临时表或类似的虚拟聚合)为了不在你的 SQL 中出现重复计算......
另请注意,如果两位导演拥有相同数量的此类电影,则只会带回一行。如果您希望返回具有相同喜剧数量的所有导演,则必须稍微修改 sql。
干杯,
诺亚·沃洛威克
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)