又个题目是这样的求平均薪水最高的部门编号,其中用的是ORACLE中的3张表
我的思路是这样的先求出来各个部门的平均薪水
SQL> select avg(sal), deptno from emp group by deptno;  AVG(SAL)     DEPTNO
---------- ----------
2916.66667         10
      2175         20
1566.66667         30得到的这张表和原来dept的表做连接
SQL> select * from dept;    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
连接的SQL语句是这样的 1  select max(avg_sal),deptno,dname from dept d
 2  join (select avg(sal)avg_sal,deptno from emp group by deptno)t
 3* on(t.deptno=d.deptno)
 4  /
select max(avg_sal),deptno,dname from dept d
                   *
ERROR at line 1:
ORA-00918: column ambiguously defined
问题出在哪里呢,如果不这样做,有什么更好的解决办法

解决方案 »

  1.   

    select * from (
    select avg(sal) avg_sal,deptno 
    from emp 
    group by deptno
    order by avg_sal desc
    )
    where rownum=1
      

  2.   

    select deptno from(
    select deptno,aaa,row_number() over(order by aaa desc) rn from(
    select deptno,avg(sal) aaa from emp group by deptno
    )) where rn = 1你的avg_sal是标识,只能在嵌套的外层使用
      

  3.   

    题目错了,我的题目要求是求平均薪水最高的部门编号和名称我按上面的提示做到了  1  select t.avg_sal,d.deptno,d.dname from dept d
      2  join (select avg(sal) avg_sal,deptno from emp group by deptno)t
      3* on(t.deptno=d.deptno)
    SQL> /   AVG_SAL     DEPTNO DNAME
    ---------- ---------- --------------
    2916.66667         10 ACCOUNTING
          2175         20 RESEARCH
    1566.66667         30 SALES但是想直接在这个表里面吧我想要的两个字段直接拿出来,就是不行
      

  4.   

     1     select t.deptno,dname, avg_sal from dept
     2     d join (select avg(sal) avg_sal, deptno from emp group by deptno)t
     3*    on(t.deptno=d.deptno)
     4  /   DEPTNO DNAME             AVG_SAL
    --------- -------------- ----------
           10 ACCOUNTING     2916.66667
           20 RESEARCH             2175
           30 SALES          1566.66667这样了,怎么拿出来最小的那两个字段,高手来看看可以不,不可以的话是什么原因