select ename,job,min(sal) from emp group by job,ename 和
select job,min(sal) from emp group by job这两段代码有什么不同?在Oracle中列出各种工作的最低工资及从事此工作的雇员姓名 又该怎么做?

解决方案 »

  1.   

    select ename,job,sal
    from 
    (select a.*,row_number() over(partition by a.job order by a.sal) rn
    from emp a
    )
    where rn=1
    ;
      

  2.   

      select ename,job,min(sal) from emp group by job,ename  这个是从emp表里面先按job,ename分组后查询ename,job,min(sal),只有当job,ename  完全一样时这两个才被分在一个组,显然emp表里面没有同时一样的job,ename   select job,min(sal) from emp group by job 这个是从emp表里面先按job分组,工作有CLERK
    ,SALESMAN,PRESIDENT,MANAGER,ANALYST五类工作,这样在里面查询job,min(sal)这样的字段显然是5个结果    在Oracle中列出各种工作的最低工资及从事此工作的雇员姓名:在ename前面加上包装,。这个对结果没有影响。
    select min(ename),job,min(sal) from emp group by job;  这样就行了
      
      

  3.   

    抱歉,上面写的有问题,
    用个子查询把select ename,job from emp  where sal in (select min(sal) from emp group by job);
      

  4.   

    select * from emp where sal in (select min(sal) from emp group by job);
    可以显示全部字段