select * from dept
where deptno=
(select e.d from(
select deptno d,avg(nvl(sal,0)) a,row_number() over(order by avg(nvl(sal,0)) desc) r from emp group by deptno ) e
where e.r=1) ;
用到的表emp、dept,这样写可以出来结果,感觉有点low,正在学习oracle,看大虾有没有更简洁的方法。

解决方案 »

  1.   

    lower也不算lower,只是如果多个部门并列最高的时候不知道 你这sql符合要求否
      

  2.   

    试试这个,手机打字,没有验证:select a.*
      from dept a,
           (select deptno,row_number()over(order by avg(nvl(sal,0)) desc) rn from emp)b
     where a.deptno = b.deptno
       and b.rn = 1
      

  3.   

    也可以这样:
    select * from dept
    where deptno=
    (select e.d from(
    select deptno d from emp group by deptno order by avg(nvl(sal,0)) desc) e
    where rownum=1) ;
    但感觉都差不多了,一个是用row_number(),一个没用row_number()。