查询指定导演电影评分均值时重复获取数据,SQL语句问题求助
问题分析与解决
你的SQL语句里多余关联了users表,而且WHERE子句里的ratings.user_id = users.id是重复的JOIN条件,这会引发不必要的笛卡尔积,最终导致评分重复输出。
修正后的SQL语句
你只需要关联ratings和movies表就能获取指定导演的电影评分,完全不需要引入users表:
SELECT rating FROM ratings JOIN movies ON ratings.movie_name = movies.name WHERE movies.director = :name
重复输出的原因
当你额外关联users表时,如果users表中存在与该user_id匹配的多条记录,或者movies表中同一电影名对应多条同导演记录,JOIN操作会将ratings里的每条评分与匹配到的记录进行组合,导致同一评分被多次输出。比如《低俗小说》若在movies表中有3条同名同导演的记录,每条评分就会被关联3次,最终输出3倍的重复数据。
如果你的目标是计算评分均值,直接用聚合函数更高效,无需先查询所有评分再手动计算:
SELECT AVG(rating) AS average_rating FROM ratings JOIN movies ON ratings.movie_name = movies.name WHERE movies.director = :name
内容的提问来源于stack exchange,提问作者MackDealer
相关产品推荐
相关产品推荐

