sql获取唯一ID,然后计算与该ID相关的元组数 数据库结构 查询

sql获取唯一ID,然后计算与该ID相关的元组数 数据库结构 查询,sql,Sql,我需要找到喜剧电影数量最多的导演。(我还需要使用ALL操作符)。我的理解是获得mvid的列表,其中类型为“喜剧”和导演: select mvid from genreinfo where genre = 'Comedy' union all select directorid from directorinfo ; 但是,我如何计算一个特定导演拥有的电影数量?如何获得“喜剧”电影数量最多的一部电影?您可以使用“加入”和“分组方式”来获得结果 select DirectorID,COUNT(mv

我需要找到喜剧电影数量最多的导演。(我还需要使用ALL操作符)。我的理解是获得mvid的列表,其中类型为“喜剧”和导演:

select mvid
from genreinfo
where genre = 'Comedy'
union all
select directorid
from directorinfo
;

但是,我如何计算一个特定导演拥有的电影数量?如何获得“喜剧”电影数量最多的一部电影?

您可以使用“加入”和“分组方式”来获得结果

select DirectorID,COUNT(mvid)
from DirectInfo d
inner join genreinfo g
ON d.mvid=g.mvid
where genre ='Comedy'
GROUP BY DirectorID
ORDER BY COUNT(mvid)

这是家庭作业?嗯,现在你正在选择一个ID列表,其中一些代表导演,另一些代表电影。你注意到这根本不是你应该做的,对吗

您需要的是一个导演列表。因此,您可以从DirectorInfo表中进行选择。您还需要有关他的电影的信息(例如:某种类型电影的数量).所以你必须加入电影信息中的信息。现在想想你还需要粘合什么才能从导演那里得到他们的电影。然后想想如何粘合到类型标准中

一旦你把所有这些都组合在一起,你就可以对结果进行分组。你希望每个导演都有一张唱片(而不是每个导演和电影都有一张唱片),所以你可以组成一个组,在这个组中进行计数


我希望这能帮助你解决你的任务。祝你好运!

你走对了方向。我建议你看看s

我已经提供了一个关于如何获得所需结果的分步回答。如果您只需要最终查询,请转到步骤5并选择一个适合您的DBMS的查询

1:选择所有喜剧电影ID: 2:选择那些电影的导演 3:选择这些董事的董事姓名。 4:按导演对该查询进行分组以获取电影数量: 5:对结果进行排序,只得到第一个结果: 如果您使用的是SQL server,请改用
TOP

SELECT TOP 1 firstname, COUNT(*) AS NumberOfMovies
FROM DirectorInfo
JOIN DirectInfo
ON DirectorInfo.directorID = DirectInfo.directorID
JOIN GenreInfo
ON DirectInfo.mvID = GenreInfo.mvID
WHERE genre = 'Comedy'
GROUP BY DirectorInfo.directorID
ORDER BY NumberOfMovies;

@rink您不认为这可能会出现错误,因为group by中的列未包含在选择列表中。很好的解释,但如果您向用户提供家庭作业的完整代码,那么您就没有帮助他获得任何知识:)嘿,很抱歉,回复太晚了。.我已经测试了最后一个(步骤5)如果出现错误,我将对其进行故障排除,看看如何使其正常工作。至于解释,我想仔细阅读前面的代码并进一步理解它们。感谢帮助,我不会将此标记为已回答,但我感谢您的帮助。我将尽我所能理解并调试此问题。至于Shaheer提到的内容,我是gu虽然大多数时候这是真的,但我希望我不会屈服于懒惰,只是复制粘贴,而是真正地学习..为大家干杯
select di.directorid, count(1) as 'no_of_comedy_movies'
from   DirectorInfo di inner join join DirectInfo dri
on     di.directorid = dri.directorid
       inner join genreinfo gi
on     gi.mvid = dri.mvid
where  gi.genre = 'Comedy'
group by dri.directorID
order by no_of_comedy_movies
SELECT mvid
FROM GenreInfo
WHERE genre = 'Comedy';
SELECT directorID
FROM DirectInfo
JOIN GenreInfo
ON DirectInfo.mvID = GenreInfo.mvID
WHERE genre = 'Comedy';
SELECT firstname
FROM DirectorInfo
JOIN DirectInfo
ON DirectorInfo.directorID = DirectInfo.directorID
JOIN GenreInfo
ON DirectInfo.mvID = GenreInfo.mvID
WHERE genre = 'Comedy';
SELECT firstname, COUNT(*) AS NumberOfMovies
FROM DirectorInfo
JOIN DirectInfo
ON DirectorInfo.directorID = DirectInfo.directorID
JOIN GenreInfo
ON DirectInfo.mvID = GenreInfo.mvID
WHERE genre = 'Comedy'
GROUP BY DirectorInfo.directorID;
SELECT firstname, COUNT(*) AS NumberOfMovies
FROM DirectorInfo
JOIN DirectInfo
ON DirectorInfo.directorID = DirectInfo.directorID
JOIN GenreInfo
ON DirectInfo.mvID = GenreInfo.mvID
WHERE genre = 'Comedy'
GROUP BY DirectorInfo.directorID
ORDER BY NumberOfMovies
LIMIT 1;
SELECT TOP 1 firstname, COUNT(*) AS NumberOfMovies
FROM DirectorInfo
JOIN DirectInfo
ON DirectorInfo.directorID = DirectInfo.directorID
JOIN GenreInfo
ON DirectInfo.mvID = GenreInfo.mvID
WHERE genre = 'Comedy'
GROUP BY DirectorInfo.directorID
ORDER BY NumberOfMovies;