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

SQL查询部门内薪资/佣金低于/高于均值人员报ORA-00979错误解决

SQL习题解答

第一题(薪资低于部门平均的员工查询)

错误原因说明

你写的SQL存在2个核心问题:

  • 子查询逻辑不符合需求:SELECT AVG(sal) FROM EMP计算的是全公司所有员工的平均薪资,不是题目要求的员工所在部门的平均薪资
  • 多余的GROUP BY导致语法报错:Oracle要求使用GROUP BY时,SELECT后所有非聚合函数的字段必须全部放到GROUP BY子句中,你SELECT了ename、sal、deptno三个字段,只在GROUP BY写了deptno,因此触发ORA-00979错误,且该需求不需要使用分组逻辑,直接删除GROUP BY即可。

正确参考SQL

SELECT ename, sal, deptno
FROM Emp e1
WHERE sal < (
    -- 子查询只计算当前员工所属部门的平均薪资
    SELECT AVG(sal) 
    FROM Emp e2 
    WHERE e2.deptno = e1.deptno
);

逻辑说明

给外层员工表起别名e1,子查询的员工表起别名e2,执行时会逐行读取e1的员工数据,每次都计算该员工所在部门的平均薪资,再对比当前员工薪资是否低于该平均值,符合条件的就会被筛选出来。

第二题(佣金高于部门平均的员工查询)

逻辑和第一题完全一致,只需要替换对比字段和判断符号即可:

SELECT ename, comm, deptno
FROM Emp e1
WHERE comm > (
    SELECT AVG(comm) 
    FROM Emp e2 
    WHERE e2.deptno = e1.deptno
    -- 若题目要求计算平均时排除无佣金的员工,可去掉下方注释
    -- AND comm IS NOT NULL
);

小提示

AVG()聚合函数计算时会自动忽略NULL值,如果部门里有员工没有佣金(comm为NULL),默认不会计入平均的计算,你可以根据题目具体要求调整过滤条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:02