编写SQL查询报错求助:统计1991-2001年演员参演电影数最值
解决1991-2001年演员参演电影数量统计问题
步骤1:计算每位演员的参演电影数量
先关联演员与电影相关表,筛选出1991至2001年间的电影,再按演员分组统计参演数量。假设你的表结构为:
actors:含actor_id(演员ID)、actor_name(演员姓名)movies:含movie_id(电影ID)、release_year(上映年份)actor_movie:含actor_id、movie_id(关联演员与电影)
基础统计查询语句:
SELECT a.actor_id, a.actor_name, COUNT(am.movie_id) AS movie_count FROM actors a JOIN actor_movie am ON a.actor_id = am.actor_id JOIN movies m ON am.movie_id = m.movie_id WHERE m.release_year BETWEEN 1991 AND 2001 GROUP BY a.actor_id, a.actor_name;
步骤2:统计参演数量的全局最大值与最小值
如果需要同时输出每位演员的参演数,以及所有演员中的最大、最小值,可使用窗口函数实现:
WITH actor_movie_counts AS ( SELECT a.actor_id, a.actor_name, COUNT(am.movie_id) AS movie_count FROM actors a JOIN actor_movie am ON a.actor_id = am.actor_id JOIN movies m ON am.movie_id = m.movie_id WHERE m.release_year BETWEEN 1991 AND 2001 GROUP BY a.actor_id, a.actor_name ) SELECT actor_id, actor_name, movie_count, MAX(movie_count) OVER () AS max_movie_count, MIN(movie_count) OVER () AS min_movie_count FROM actor_movie_counts ORDER BY movie_count DESC;
常见错误排查
如果你的查询报错,大概率是以下原因:
- 分组字段不完整:使用
GROUP BY时,所有非聚合字段必须包含在分组列表中(比如只分组actor_id却选择actor_name,部分数据库会报错) - 表关联逻辑错误:未正确关联演员、电影和关联表,导致数据重复或缺失
- 筛选条件位置错误:把年份筛选放在
HAVING而非WHERE子句,会导致统计范围偏离需求 - 聚合函数嵌套错误:直接写
MAX(COUNT(...))这类嵌套,需先分组统计再计算全局极值
期望结果样式示例
| actor_id | actor_name | movie_count | max_movie_count | min_movie_count |
|---|---|---|---|---|
| 1 | Tom Hanks | 12 | 12 | 1 |
| 2 | Julia Roberts | 10 | 12 | 1 |
| ... | ... | ... | ... | ... |
内容的提问来源于stack exchange,提问作者Adewale Obalalanlege
相关产品推荐
相关产品推荐

