MySQL计算各用户最高积分平均值的查询错误问题
解决MySQL计算用户最高积分平均值的问题
嘿,我明白你的问题啦!你现在遇到的问题是直接用SELECT avg(points) FROM table会把所有行的积分都算进去(也就是(100+200+300+400)/4=250),但你真正需要的是先拿到每个用户的最高积分,再对这些最高分求平均值,也就是(200+400)/2=300。
正确的SQL查询方法
我们可以通过子查询或者CTE来实现这个需求,核心思路是先按用户分组获取每个用户的最高积分,再对这些结果计算平均值:
方法1:使用子查询
SELECT AVG(max_points) AS average_of_max_points FROM ( -- 先获取每个用户的最高积分 SELECT MAX(points) AS max_points FROM your_table_name -- 这里替换成你的实际表名 GROUP BY user ) AS user_max_scores;
方法2:使用CTE(MySQL 8.0+支持)
如果你的MySQL版本是8.0及以上,也可以用更清晰的CTE写法:
WITH user_max_scores AS ( SELECT MAX(points) AS max_points FROM your_table_name GROUP BY user ) SELECT AVG(max_points) AS average_of_max_points FROM user_max_scores;
结果验证
执行上面的查询后,会先得到每个用户的最高积分:
| max_points |
|---|
| 200 |
| 400 |
然后计算这两个值的平均值,结果就是300,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Shamss Zaidan
相关产品推荐
相关产品推荐

