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

如何在WHERE子句中使用AVG()函数解决分组函数非法使用报错

SQL在WHERE子句中使用AVG()聚合函数的解决方案

报错原因

WHERE子句的执行优先级高于聚合函数计算,执行WHERE过滤逻辑时,全表的平均薪资还未完成计算,因此不允许直接在WHERE中使用AVG()这类聚合函数作为判断条件,就会触发invalid use of group function错误。

正确实现方式

方式1:使用嵌套子查询提前计算平均薪资

先通过子查询计算出全表员工的平均薪资,再在外层查询的WHERE条件中做比对:

SELECT sal
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp);

方式2:使用窗口函数计算全量平均后过滤

通过窗口函数OVER()给每行数据附加全表平均薪资字段,再在外层做过滤:

SELECT sal
FROM (
    SELECT sal, AVG(sal) OVER() AS avg_sal
    FROM emp
) AS temp_emp
WHERE sal > avg_sal;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 02:57:00