0

数据库结构

MovieInfo (mvID, title, rating, year, length, studio)
DirectorInfo(directorID, firstname, lastname)
MemberInfo(username, email, password)
ActorInfo(actorID, firstname, lastname, gender, birthplace)
CastInfo(mvID*, actorID*)
DirectInfo(mvID*, directorID*)
GenreInfo(mvID*, genre)
RankingInfo(username*, mvID*, score, voteDate)

询问

我需要找到喜剧电影数量最多的导演。(我还需要使用 ALL 运算符)。我的理解是获得以下列表mvid where genre = 'Comedy" and directorid

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

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

4

4 回答 4

3

你在正确的轨道上。建议看JOINs。

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

1:选择所有喜剧电影 ID:

SELECT mvid
FROM GenreInfo
WHERE genre = 'Comedy';

2:选择那些电影的directorID

SELECT directorID
FROM DirectInfo
JOIN GenreInfo
ON DirectInfo.mvID = GenreInfo.mvID
WHERE genre = 'Comedy';

3:选择这些董事的董事姓名。

SELECT firstname
FROM DirectorInfo
JOIN DirectInfo
ON DirectorInfo.directorID = DirectInfo.directorID
JOIN GenreInfo
ON DirectInfo.mvID = GenreInfo.mvID
WHERE genre = 'Comedy';

4:按导演分组查询以获得电影数量:

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;

5:对结果进行排序,只得到第一个:

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;

如果您使用的是 SQL 服务器,请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;
于 2013-09-24T05:59:27.067 回答
0

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

你想要的是一份董事名单。因此,您从 DirectorInfo 表中进行选择。您还需要有关他的电影的信息(特别是:某种电影的数量)。因此,您必须加入来自 MovieInfo 的信息。现在想想你还需要粘合什么才能从导演到他们的电影。然后考虑如何结合该类型标准。

将所有结果结合在一起后,即可对结果进行分组。您希望每位导演一个记录(而不是每个导演和电影一个记录),因此您创建一个组并在该组中计数。

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

于 2013-09-24T05:59:19.630 回答
0

您可以使用 join 和 group by 来获得结果。

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)
于 2013-09-24T05:52:51.090 回答
-1
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
于 2013-09-24T05:55:45.290 回答