只需删除您正在计数的列上的不同值。
SELECT actorinfo.actorID,
actorinfo.firstname,
actorinfo.lastname,
COUNT(actorinfo.actorID) as total
FROM ActorInfo as actorinfo
LEFT OUTER JOIN CastInfo as castinfo
ON actorinfo.actorID= castinfo.actorID
LEFT OUTER JOIN GenreInfo as genreinfo
ON castinfo.mvID = genreinfo.mvID
WHERE genreinfo.genre = 'Drama'
GROUP BY actorinfo.actorID
ORDER BY total ASC;
http://sqlfiddle.com/#!2/29364/6
您不想计算组中 id 值的不同出现次数,因为您要分组的 id 显然在组中始终具有相同的值。或者,您可以对genreinfo 的id 和actor 的id 进行分组,并计算组内的所有记录,这更容易解释。
SELECT actorinfo.actorID,
actorinfo.firstname,
actorinfo.lastname,
COUNT(*) as total
FROM ActorInfo as actorinfo
LEFT OUTER JOIN CastInfo as castinfo
ON actorinfo.actorID= castinfo.actorID
LEFT OUTER JOIN GenreInfo as genreinfo
ON castinfo.mvID = genreinfo.mvID
WHERE genreinfo.genre = 'Drama'
GROUP BY genreinfo.mvId,actorinfo.actorID
ORDER BY total ASC;
如果您有与特定电影相关的信息,我想那会转到演员和流派之间关系所在的 castinfo。在这种情况下,您应该执行以下操作以避免重复,
SELECT actorinfo.actorID,
actorinfo.firstname,
actorinfo.lastname,
COUNT(DISTINCT castinfo.movie_name) as total
FROM ActorInfo as actorinfo
LEFT OUTER JOIN CastInfo as castinfo
ON actorinfo.actorID= castinfo.actorID
LEFT OUTER JOIN GenreInfo as genreinfo
ON castinfo.mvID = genreinfo.mvID
WHERE genreinfo.genre = 'Drama'
GROUP BY genreinfo.mvId,actorinfo.actorID
ORDER BY total ASC;
http://sqlfiddle.com/#!2/aa4363/1