select deptno,sal from emp where emp.sal= 
(select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno)); 这句语句为什么会显示未选定行

解决方案 »

  1.   


    这样写就没错了
    select deptno,sal from emp where emp.sal=  
    (select round(max(avg_sal),2) from (select avg(sal) avg_sal,deptno from emp group by deptno));desc emp
    名称       空值       类型           
    -------- -------- ------------ 
    EMPNO    NOT NULL NUMBER(4)    
    ENAME             VARCHAR2(10) 
    JOB               VARCHAR2(9)  
    MGR               NUMBER(4)    
    HIREDATE          DATE         
    SAL               NUMBER(7,2)  
    COMM              NUMBER(7,2)  
    DEPTNO            NUMBER(2)    emp表中的sal小数点后有两位,比较可能有问题
      

  2.   


    --要先明白自已的意思
    --分开你的来看,下面这个语句你想,取出来按部门求平均工资最大的
    select max(avg_sal) from (select avg(sal) avg_sal,deptno from emp group by deptno);
    --而你这句,是取emp中sal等于取出来的平均工资最大值的记录,但emp中没有任何一个人的工资是等于这个值的,因此是没有记录的
    select deptno,sal from emp where emp.sal=取出来的平均工资最大值 
      

  3.   

    2楼解释的已经比较清楚了,表emp中没有erm.sal=取出工资最大值的数据。 
      

  4.   

    嗯,2楼说的对,emp中没有sal等于平均工资最大值的人。。