with 
 t1 as
 (
 select 'jones' as name,2975 as sal from dual
 union all
 select 'scott' as name,3000 as sal from dual
 union all
 select 'ford' as name,3000 as sal from dual
 union all
 select 'sakl' as name,2500 as sal from dual
 union all
 select 'wh' as name,1100 as sal from dual
 )
 select * from t1以上为数据
问题描述:展示收入排名前三位的员工信息结果:
1 scott 3000
1 ford 3000
2 jones 2975
3 sakl  2500求sql

解决方案 »

  1.   

    错了吧,前三应该是
    1 scott 3000
    1 ford 3000
    3 jones 2975
      

  2.   

    select name , sal, dense_rank() over( order by sal desc) as rank_num from t1
      

  3.   

     --1,1,3RANK
    SELECT * FROM (
    SELECT name,RANK()OVER(ORDER BY SAL DESC) AS RANKSEL FROM T1) WHERE RANKSEL<=3
     --1,1,2,3DENSE_RANK
    SELECT * FROM (
    SELECT name,DENSE_RANK()OVER(ORDER BY SAL DESC) AS RANKSEL FROM T1) WHERE RANKSEL<=3
      

  4.   

    with 
     t1 as
     (
     select 'jones' as name,2975 as sal from dual
     union all
     select 'scott' as name,3000 as sal from dual
     union all
     select 'ford' as name,3000 as sal from dual
     union all
     select 'sakl' as name,2500 as sal from dual
     union all
     select 'wh' as name,1100 as sal from dual
     )
     select name , sal,rank() over( order by sal desc) as rank_num from t1 where rownum < 4   学习了