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

SQL查询:如何筛选分组平均价高于全局总均价的类别

问题原因

  • 聚合函数的执行时机晚于WHERE子句的过滤逻辑,因此不能直接在WHERE中使用AVG()这类聚合函数做过滤条件,过滤聚合结果需要使用HAVING子句。
  • 全局均价是全表聚合的结果,可以单独通过一个标量子查询提前计算出来,不需要额外写关联逻辑增加复杂度。

正确SQL写法

简洁版写法(推荐)

直接在分组后通过HAVING对比分组均价和全局均价即可:

SELECT 
    t,
    AVG(q) AS avg_group
FROM a
GROUP BY t
HAVING AVG(q) > (SELECT AVG(q) FROM a);

原写法调整版

如果要保留你原来的关联逻辑写法,提前把全局均价单独计算出来关联即可:

SELECT b.t, b.AvgQ as avg_group
FROM 
    (SELECT AVG(q) as AvgQ, t FROM a GROUP BY t) b
    CROSS JOIN (SELECT AVG(q) as global_avg FROM a) g
WHERE b.AvgQ > g.global_avg;

结果验证

执行上述任意一种SQL,返回结果都和你预期的完全一致:

t | avg_group
--+----------
1 | 6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:03