先分组,再排序,然后取rownum<3的记录

解决方案 »

  1.   

    select * from
     (
         select
             t.deptno,
             t.name,
             t.sal+t.comm ,
             dense_rank() over(partition by t.deptno order by t.sal+t.comm desc) rank
         from
             emp t
     ) s
     where s.rank<=2;
      

  2.   

    select * from (
    select * from emp order by (sal+ comm)
     desc) where rownum < 3
      

  3.   

    select * from
        (select *,rownum rn from emp group by deptno order by (sal+ comm) desc)
    where rn<=2