如何按电影ID分组计算二次平均评分?
解决方案
要实现你需要的评分计算逻辑,得先通过子查询或CTE算出每位用户对每部电影的平均评分,再基于这个中间结果按电影ID分组计算最终均值。直接在原语句加group by movie_id失败的原因是:原查询的select列表包含person_id这个非聚合字段,分组时数据库无法确定要返回哪个用户ID,不符合分组规则。
方法一:使用子查询
SELECT movie_id, AVG(user_avg_score) AS movie_final_avg FROM ( -- 先计算每位用户对每部电影的三维评分平均值 SELECT person_id, movie_id, ((soundtrack_rate + casting_rate + story_rate) / 3) AS user_avg_score FROM ratings ) AS user_movie_scores GROUP BY movie_id;
方法二:使用CTE(公共表表达式,可读性更强)
WITH user_movie_scores AS ( SELECT person_id, movie_id, ((soundtrack_rate + casting_rate + story_rate) / 3) AS user_avg_score FROM ratings ) SELECT movie_id, AVG(user_avg_score) AS movie_final_avg FROM user_movie_scores GROUP BY movie_id;
针对电影ID 858228的验证
如果该电影有两位用户的user_avg_score分别为1和0.6,上述查询会计算AVG(1, 0.6),结果正好是0.8,符合你的预期。最终结果会按movie_id分组,每部电影只返回一条最终均值记录。
内容的提问来源于stack exchange,提问作者noob234
相关产品推荐
相关产品推荐

