又个题目是这样的求平均薪水最高的部门编号,其中用的是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
问题出在哪里呢,如果不这样做,有什么更好的解决办法
我的思路是这样的先求出来各个部门的平均薪水
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
问题出在哪里呢,如果不这样做,有什么更好的解决办法
select avg(sal) avg_sal,deptno
from emp
group by deptno
order by avg_sal desc
)
where rownum=1
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是标识,只能在嵌套的外层使用
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但是想直接在这个表里面吧我想要的两个字段直接拿出来,就是不行
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这样了,怎么拿出来最小的那两个字段,高手来看看可以不,不可以的话是什么原因