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

oraclerank()函數總結

2013-11-13 22:23:16  來源: Oracle 

  首先要了解rank在英語的意思等級也就是說這是一個給數據確定等級的函數

  以銷售為例有地區銷售員銷售額記錄這五個字段我們可以按地區銷售額對銷售員進行排序這樣對銷售員來說就相當於有一個等級概念了第一名就是銷售最高的如果我們要找出每個地區銷售額的前三名銷售員SQL如何寫?

  Sql代碼

  SELECT area_code YEAR MONTH saleroomsaler

  RANK () OVER (PARTITION BY area_codeyear month ORDER BY area_codeyearmonthsaleroom ) RANK

  FROM t_sale

  Sql代碼

  SELECT

  RANK(SHENZHEN)  WITHIN GROUP

  (ORDER BY area_codeyearmonthsaleroom) Rank

  FROM T_SALE

  上面這個SQL就可以搞定了要注意的是Rank()裡的參數必須為常數或常值表達式裡面參數的個數類型也要和order by後字段的類型相對應

  上面就是Rank函數的兩個用法另外還有一個dense_rank()它的用法和rank()一樣只是計算等級的方式不同例如上面的

  用dense_rank() 就是

  其實現在Oracle對於rank和dense_rank已經支持合計功能不過這次我僅僅使用了其分析功能具體語法如下RANK ( ) OVER ( [query_partition_clause] order_by_clause )

  下面給出一些來自網上的示例

  TABLES (subjectmark)

  數學

  語文

  數學

  數學

  數學

  語文

  語文

  語文

  現在我想要的結果是每門科目的前名的分數

  數學

  數學

  數學

  語文

  語文

  語文

  那麼語句就這麼寫

  select * from (select rank() over(partition by subject order by mark desc) rkS* from S) T

  where Trk<=;

  dense_rank與rank()用法相當但是有一個區別dence_rank在處理相同的等級時等級的數值不會跳過rank則跳過 row_number() 補充

  例如

  A B C

  a          liu          wang

  a          jin          shu

  a          cai          kai

  b          yang      du

  b          lin          ying

  b          yao        cai

  b          yang     

  例如當rank時為

  select mambmcrank() over(partition by a order by b) liu from test m

  A          B             C          LIU

  a          cai          kai         

  a          jin           shu       

  a          liu           wang    

  b          lin           ying       

  b          yang      du          

  b          yang                

  b          yao        cai          

  而如果用dense_rank時為

  select mambmcdense_rank() over(partition by a order by b) liu from test m

  A          B             C          LIU

  a          cai          kai         

  a          jin           shu       

  a          liu           wang    

  b          lin           ying       

  b          yang      du          

  b          yang                

  b          yao        cai          

  而如果用row_number()時為

  select mambmcrow_number() over(partition by a order by b) liu from test m

  A          B             C          LIU

  a          cai          kai         

  a          jin           shu       

  a          liu           wang    

  b          lin           ying       

  b          yang      du          

  b          yang                

  b          yao        cai          

  現在RANK 就是有了這個字段就很容易得到前三名的銷售員了

  新問題:銷售額塊在深圳月能排到第幾?


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