如何求取每个部门工资前2名员工的 部门编号,姓名,工资

解决方案 »

  1.   


    select deptno,ename,sal from(
    select rank() over(partition by deptno order by (sal+nvl(comm,0)) desc) rn,deptno,ename,sal from emp)
    where rn<3;
      

  2.   

    rank()取的话,如果有三名并列第一会一起取出来,如果只取每个部门前两个,直接用row_number(),看你的需求了
      

  3.   


    --晕,奖金少写了(sal+nvl(comm,0)) sal,不需要的话就只用sal吧
    select deptno,ename,sal from(
        select rank() over(partition by deptno order by (sal+nvl(comm,0)) desc) rn,deptno,ename,(sal+nvl(comm,0)) sal from emp)
    where rn<3;