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

求助:统计薪资高于平均值的员工数SQL语句报错问题

解决薪资高于平均薪资的员工统计问题

嘿,这个问题我碰到过不少次,咱们来一步步解决它~

首先得搞懂你原来的SQL为什么报错:

SELECT COUNT(workers_id) FROM flight_company.workers WHERE Salary > AVG(Salary);

问题出在WHERE子句不能直接使用聚合函数(比如AVG())。SQL的执行顺序是先处理FROM和WHERE筛选行,之后才会执行聚合计算(比如AVG、COUNT这些)。这时候WHERE执行时,AVG(Salary)还没计算出来,自然会报错。

下面给你两种靠谱的解决方案:

方案1:使用子查询先计算平均薪资

这是最通用的方法,几乎所有数据库都支持:

SELECT COUNT(workers_id) 
FROM flight_company.workers 
WHERE Salary > (SELECT AVG(Salary) FROM flight_company.workers);

原理很简单:先执行括号里的子查询,算出整个workers表的平均薪资,然后外部查询再筛选出薪资高于这个平均值的员工,最后统计他们的数量。

方案2:使用窗口函数(适用于支持窗口函数的数据库)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),可以用这种方式:

SELECT COUNT(*)
FROM (
    SELECT Salary, AVG(Salary) OVER () AS avg_salary
    FROM flight_company.workers
) AS sub
WHERE Salary > avg_salary;

这里的AVG(Salary) OVER ()会给每一行员工数据都附加一个整个表的平均薪资值,子查询生成带平均薪资的临时结果集后,外部查询再筛选并统计符合条件的员工数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:27:54