You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:30:34