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

SQL语句验证:查询平均薪资最高部门的编号及最低薪资

验证SQL语句的正确性:查询平均薪资最高部门的编号及最低薪资

这段SQL不正确,问题出在WHERE子句的子查询部分:

select max(avg(sal)) from emp group by deptno

错误原因

group by deptno会返回多行结果(每个部门对应一行,值为该部门的平均薪资),而max()聚合函数无法直接对分组后的多行结果进行计算,数据库会报错(比如Oracle提示“不是单组分组函数”,MySQL会因子查询返回多行无法匹配=运算符报错)。必须先把所有部门的平均薪资作为临时数据集,再从中取最大值。

修正后的SQL

select min_sal, deptno, round(avg_sal)
from 
(select avg(sal) as avg_sal, min(sal) as min_sal, deptno
from emp
group by deptno) dept_sal
where avg_sal = (
    select max(avg_sal) 
    from (select avg(sal) as avg_sal from emp group by deptno) temp_avg
);

补充说明

  1. 给外层子查询(select avg(sal)... group by deptno)添加别名dept_sal,这是多数数据库的语法要求(比如Oracle必须给派生表指定别名)。
  2. 内层临时表temp_avg生成所有部门的平均薪资列表,再通过max()取最大值,这样就能精准匹配平均薪资最高的部门数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:01:33