为何SQLite3计算2012年电影AVG/COUNT/SUM无有效结果?
解决2012年电影平均评分计算返回空的问题
问题根源
你原来的查询用了movie_id = (SELECT id FROM movies WHERE year = 2012),但子查询返回的是2012年所有电影的ID(多个值),而=运算符只能匹配单个值,这就导致WHERE条件完全不生效,没有任何评分数据被筛选出来,所以AVG结果为空、COUNT返回0。
解决方案
以下两种方法都能正确忽略无评分的电影,计算2012年有评分电影的平均评分:
方法1:用IN替代=
把=改成IN,让movie_id匹配子查询返回的所有2012年电影ID,自动忽略ratings表中不存在的(无评分)电影:
SELECT AVG(rating) FROM ratings WHERE movie_id IN (SELECT id FROM movies WHERE year = 2012);
方法2:使用INNER JOIN关联表(更直观)
通过INNER JOIN关联movies和ratings表,只保留两边都有数据的记录(即有评分的2012年电影),再计算平均:
SELECT AVG(r.rating) FROM movies m INNER JOIN ratings r ON m.id = r.movie_id WHERE m.year = 2012;
说明
两种方法的核心都是只统计在ratings表中有记录的2012年电影:
- 方法1利用
IN匹配多个ID,ratings表中没有的电影ID不会被选中; - 方法2的INNER JOIN直接过滤掉无评分的电影,只保留有评分的记录进行计算。
内容的提问来源于stack exchange,提问作者user19916937
相关产品推荐
相关产品推荐

