SQL报错Misuse of aggregate function AVG() 如何查询高于平均薪资的员工
错误原因
WHERE子句的执行优先级高于聚合函数计算,数据库执行WHERE条件筛选时,还未完成全表聚合计算,无法得到AVG(employee_salary)的结果,因此会抛出聚合函数误用的报错。
修正写法
写法1:子查询实现(全数据库兼容)
先通过子查询提前计算出全表平均薪资,再放到外层WHERE条件做判断:
SELECT employee_id, employee_name, employee_salary FROM Employees WHERE employee_salary > (SELECT AVG(employee_salary) FROM Employees);
手动验证全表平均薪资:(35000+50000+45000+55000+45000)÷5 = 46000,筛选薪资大于46000的员工刚好符合你期望的输出结果。
写法2:CTE实现(适配MySQL8.0+、PostgreSQL、SQL Server等支持CTE的数据库)
通过公共表表达式预先存储平均薪资,再关联查询筛选:
WITH avg_salary AS ( SELECT AVG(employee_salary) AS avg_val FROM Employees ) SELECT e.employee_id, e.employee_name, e.employee_salary FROM Employees e JOIN avg_salary a ON e.employee_salary > a.avg_val;
内容的提问来源于stack exchange,提问作者user01
相关产品推荐
相关产品推荐

