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

如何正确在HAVING子句中使用AVG聚合函数?

问题分析与修正方案

你的SQL之所以没有返回结果,核心问题出在分组逻辑上:

  • 你按score字段分组,由于表中每个score值都是唯一的,每个分组里只会有一条对应的数据
  • 此时AVG(score)计算的就是该分组唯一的score值,score > AVG(score)等价于score > score,这个条件永远不成立,所以没有结果返回

如果你的需求是找出所有大于整体平均分的score记录,可以用以下两种方式修正:

方式1:子查询获取整体平均分

SELECT score
FROM tab
WHERE score > (SELECT AVG(score) FROM tab);

方式2:使用窗口函数(MySQL 8.0+支持)

SELECT DISTINCT score
FROM (
    SELECT score, AVG(score) OVER() AS overall_avg
    FROM tab
) t
WHERE score > overall_avg;

执行以上任意一种SQL,都会返回大于整体平均分((22+45+82+87)/4=59)的82和87两条记录。

内容的提问来源于stack exchange,提问作者JMP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:10:14