分析函數之二

2.rank()dense_rank() 的使用
  
  原表資訊:
  
  SQL> break on deptno skip 1 -- 爲效果更明顯,把不同部門的資料隔段顯示。
  SQL> select deptno,ename,sal
  2 
from emp
  3 
order by deptno,sal desc;
  

    DEPTNO ENAME       SAL
  
---------- ---------- ----------
      10 KING      
5000
        CLARK      
2450
        MILLER     
1300
  

      20 SCOTT      3000
        FORD      
3000
        JONES      
2975
        ADAMS      
1100
        SMITH      
800
  

      30 BLAKE      2850
        ALLEN      
1600
        TURNER     
1500
        WARD      
1250
        MARTIN     
1250
        JAMES      
950
  

  已選擇14行。
  
  使用rank()查出各部門薪水前三名的員工姓名、薪水。
  SQL> select * from (
  2 
select deptno,rank() over(partition by deptno order by sal desc) rk,ename,sal
  3 
from emp
  4 
)
  5 
where rk<=3
  6 
/
    DEPTNO     RK ENAME      
SAL
  
---------- ---------- ---------- ----------
      10     1 KING      
5000
            2 CLARK      
2450
            3 MILLER     
1300
  

      20     1 SCOTT      3000
            1 FORD      
3000
            3 JONES      
2975
  

      30     1 BLAKE      2850
            2 ALLEN      
1600
            3 TURNER     
1500
  

  已選擇9行。
  
  使用dense_rank()查出各部門薪水前三名的員工姓名、薪水。
  SQL> select * from (
  2 
select deptno,dense_rank() over(partition by deptno order by sal desc) drk,ename,sal
  3 
from emp
  4 
)
  5 
where drk<=3
  6 
/
    DEPTNO    DRK ENAME      
SAL
  
---------- ---------- ---------- ----------
      10     1 KING      
5000
            2 CLARK      
2450
            3 MILLER     
1300
  

      20     1 SCOTT      3000
            1 FORD      
3000
            2 JONES      
2975
            3 ADAMS      
1100
  

      30     1 BLAKE      2850
            2 ALLEN      
1600
            3 TURNER     
1500
  

  
  已選擇10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值