SQL统计问题:如何按电影分别统计对应角色数量
按电影统计角色数量的解决方法
你需要用GROUP BY子句按电影的唯一标识分组,这样COUNT函数就会针对每一部电影单独统计角色数量,而不是计算所有角色的总数。
假设你的电影表名为movies(字段:movie_id、movie_name),角色表名为roles(字段:movie_id、role),以下是两种常用的SQL写法:
1. 只统计有角色的电影
如果只需要显示存在角色的电影,用内关联(JOIN):
SELECT m.movie_id, m.movie_name, COUNT(r.role) AS role_count FROM movies m JOIN roles r ON m.movie_id = r.movie_id GROUP BY m.movie_id, m.movie_name;
2. 统计所有电影(含无角色的电影,角色数显示0)
如果要包含没有角色的电影,用左关联(LEFT JOIN):
SELECT m.movie_id, m.movie_name, COUNT(r.role) AS role_count FROM movies m LEFT JOIN roles r ON m.movie_id = r.movie_id GROUP BY m.movie_id, m.movie_name;
关键说明
你之前得到总数是因为没加GROUP BY,此时COUNT会把所有关联后的行当成一组计算总数。加上GROUP BY m.movie_id, m.movie_name后,数据库会将相同movie_id的记录归为一组,每组单独统计角色数量。
如果role字段可能存在空值,改用COUNT(*)会更准确(它会统计所有关联行,包括空值):
COUNT(*) AS role_count
内容的提问来源于stack exchange,提问作者user18514662
相关产品推荐
相关产品推荐

