熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

深入探討:oracle中row

2022-06-13   來源: Oracle 
row_number()over(partition by col order by col)表示根據col分組在分組內部根據col排序而此函數計算的值就表示每組內部排序後的順序編號(組內連續的唯一的)
與rownum的區別在於使用rownum進行排序的時候是先對結果集加入偽劣rownum然後再進行排序而此函數在包含排序從句後是先排序再計算行號碼
row_number()和rownum差不多功能更強一點(可以在各個分組內從開始排序)
rank()是跳躍排序有兩個第二名時接下來就是第四名(同樣是在各個分組內)
dense_rank()也是連續排序有兩個第二名時仍然跟著第三名相比之下row_number是沒有重復值的
oracle 分析函數 row_number()返回一個整數值(>=);
語法格式:
row_number() over (order by col_[col_ ])
作用:按照col_[col_ ]排序返回排序後的結果集
此用法有點像rownum為每一行返回一個不相同的值

  復制代碼 代碼如下:

  select rownumenamejob   
    row_number() over (order by rownum) row_number   
from emp;   
    ROWNUM ENAME      JOB       ROW_NUMBER   
   
         SMITH      CLERK                 
         ALLEN      SALESMAN              
         WARD       SALESMAN              
         JONES      MANAGER               
         MARTIN     SALESMAN              
         BLAKE      MANAGER               
         CLARK      MANAGER               
         SCOTT      ANALYST               
         KING       PRESIDENT             
        TURNER     SALESMAN             
        ADAMS      CLERK                
        JAMES      CLERK                
        FORD       ANALYST              
        MILLER     CLERK              


如果沒有partition by子句 結果集將是按照order by 指定的列進行排序

  復制代碼 代碼如下:

  with row_number_test as(   
     select atwenty two b from dual union all   
     select one from dual union all   
     select thirteen from dual union all   
     select five from dual union all   
     select four from dual)   
select ab   
       row_number() over (order by b)   
from row_number_test   
order by a; 


正如我們所期待的row_number()返回按照b列排序的結果
然後再按照a進行排序才得到下面的結果:

  復制代碼 代碼如下:

  A B          ROW_NUMBER()OVER(ORDERBYB)   
   
one                                    
four                                   
five                                   
thirteen                               
twenty two                           


row_number() over (partition by col_n[col_m ] order by col_[col_ ])
作用:先按照col_n[col_m 進行分組
再在每個分組中按照col_[col_ ]進行排序(升序)
最後返回排好序後的結果集:

  復制代碼 代碼如下:

  with row_number_test as(   
     select atwenty two b* c from dual union all   
     select one+ from dual union all   
     select thirteen* from dual union all   
     select five+ from dual union all   
     select four+ from dual)   
select ab   
       row_number() over (partition by c order by b) row_number   
from row_number_test   
order by a; 


這個例子中我們先按照c列分組分為組(*+組)
再按照每個小組的b列進行排序(按字符串首字母的ascii碼排)
最後按照a列排序得到下面的結果集:

  復制代碼 代碼如下:

  A B          ROW_NUMBER   
   
one                    
four                   
five                   
thirteen               
twenty two         



From:http://tw.wingwit.com/Article/program/Oracle/201405/30853.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.