【发布时间】:2019-12-31 14:52:55
【问题描述】:
我想统计一个“子”在 N..N 关系中出现的次数,并按“父”的字段对结果进行分组。
我很难说出确切的话,所以假设我有 3 张桌子:电影、演员、播放 ,其中 Play 是 Movie 和 Actor 之间的关系。演员可以出演电影。 可能有些演员存在于数据库中,但从未在数据库的任何电影中演出过。
在电影表中,我有一个流派。
我想统计每个流派的演员数量,而不是每个流派多次计算同一个演员。
我目前在每次播放的 actor_id 上使用 DISTINCT,这意味着理论上在同一部电影中多次播放的演员将出现一次......但这是一个没有意义的场景(因为该演员只会出现播放表中的每部电影一次),所以它是无用的,而不是我想要的。有更好的主意吗?
我想将所有内容保存在一个查询中,因为我实际上正在执行其他子查询来获取每个流派的其他统计信息。
这是我的查询的样子,没有其他子查询:
SELECT
movie.genre,
SUM(
SELECT COUNT(DISTINCT play.actor_id)
FROM play
WHERE play.movie_id = movie.id
) AS number_of_actors
FROM movie
GROUP BY movie.genre
目前,如果一个演员演过几部电影,他会被计算几次。
【问题讨论】:
-
电影可以没有演员吗?意思是,
play表中是否有电影id没有对应的行?
标签: mysql count correlated-subquery distinct-values