oracle 显示平均薪金最高的部门的部门编号和最低薪金

wxclj1h5  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(147)

显示 部门 编号 和 平均 薪金 最 高 的 部门 的 最 低 薪金 ( 使用 子 查询 ) 。 我 想 检查 我 的 答案

这 是 正确 答案 吗 ?

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) 
where avg_sal=(select max(avg(sal)) from emp group by deptno);

中 的 每 一 个

zwghvu4y

zwghvu4y1#

这 是 您 的 查询 返回 的 结果 ( 对 我 来说 , 结果 似乎 还 可以 - - 就 我 对 问题 的 理解 而言 ) :

SQL> select min_sal, deptno, round(avg_sal)
  2  from (select avg(sal) as avg_sal, min(sal) as min_sal, deptno
  3        from emp
  4        group by deptno
  5       )
  6  where avg_sal = (select max(avg(sal)) from emp group by deptno);

   MIN_SAL     DEPTNO ROUND(AVG_SAL)
---------- ---------- --------------
      1300         10           2917

中 的 每 一 个
但是 , 考虑 一 种 稍微 不同 的 方法 - - 从 emp 表 中 只 选择 一 次 - - 如果 它 是 一 个 非常 大 的 表 ( 有 很多 行 ) , 这种 方法 的 性能 会 更 好 。
基本 上 , 按 平均 薪金 以 降 序 对 行 进行 排序 , 并 返回 排名 最 高 的 行 :

SQL> with temp as
  2    (select deptno,
  3         min(sal) min_sal,
  4         round(avg(sal)) avg_sal,
  5         dense_rank() over (order by avg(sal) desc) rnk_avg_sal
  6     from emp
  7     group by deptno
  8    )
  9  select a.min_sal, a.deptno, a.avg_sal
 10  from temp a
 11  where a.rnk_avg_sal = 1;

   MIN_SAL     DEPTNO    AVG_SAL
---------- ---------- ----------
      1300         10       2917

SQL>

格式

相关问题