亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle開發(fā)之分析函數(shù)(Rank, Dense_rank, row_number)

2024-08-29 13:59:05
字體:
供稿:網(wǎng)友

一、使用rownum為記錄排名:

在前面一篇《Oracle開發(fā)之分析函數(shù)簡介Over》,我們認(rèn)識了分析函數(shù)的基本應(yīng)用,現(xiàn)在我們再來考慮下面幾個問題:

①對所有客戶按訂單總額進(jìn)行排名
②按區(qū)域和客戶訂單總額進(jìn)行排名
③找出訂單總額排名前13位的客戶
④找出訂單總額最高、最低的客戶
⑤找出訂單總額排名前25%的客戶

按照前面第一篇文章的思路,我們只能做到對各個分組的數(shù)據(jù)進(jìn)行統(tǒng)計,如果需要排名的話那么只需要簡單地加上rownum不就行了嗎?事實情況是否如此想象般簡單,我們來實踐一下。

【1】測試環(huán)境:

 

復(fù)制代碼 代碼如下:
SQL> desc user_order;

 

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 REGION_ID                                          NUMBER(2)
 CUSTOMER_ID                                  NUMBER(2)
 CUSTOMER_SALES                          NUMBER

【2】測試數(shù)據(jù):

 

復(fù)制代碼 代碼如下:
SQL> select * from user_order order by customer_sales;

 

 REGION_ID CUSTOMER_ID CUSTOMER_SALES
---------- ----------- --------------
         5           1              151162
        10          29             903383
         6           7              971585
        10          28            986964
         9          21           1020541
         9          22           1036146
         8          16           1068467
         6           8            1141638
         5           3            1161286
         5           5            1169926
         8          19           1174421
         7          12           1182275
         7          11           1190421
         6          10           1196748
         6           9            1208959
        10          30          1216858
         5             2                1224992
           9             24              1224992
           9             23              1224992

           8          18           1253840
         7          15           1255591
         7          13           1310434
        10          27          1322747
         8          20           1413722
         6           6            1788836
        10          26          1808949
         5           4            1878275
         7          14           1929774
         8          17           1944281
         9          25           2232703

30 rows selected.

注意這里有3條記錄的訂單總額是一樣的。假如我們現(xiàn)在需要篩選排名前12位的客戶,如果使用rownum會有什么樣的后果呢?

 

復(fù)制代碼 代碼如下:
SQL> select rownum, t.*
    from (select *
            from user_order
           order by customer_sales desc) t
   where rownum <= 12
   order by customer_sales desc;

 

    ROWNUM  REGION_ID CUSTOMER_ID CUSTOMER_SALES
---------- ---------- ----------- --------------
         1          9                 25        2232703
         2          8                 17        1944281
         3          7                 14        1929774
         4          5                   4        1878275
         5         10                26        1808949
         6          6                   6        1788836
         7          8                 20        1413722
         8         10                27        1322747
         9          7                13        1310434
        10          7               15        1255591
        11          8               18        1253840
          12             5                     2          1224992

12 rows selected.

很明顯假如只是簡單地按rownum進(jìn)行排序的話,我們漏掉了另外兩條記錄(參考上面的結(jié)果)。

二、使用分析函數(shù)來為記錄排名:

針對上面的情況,Oracle從8i開始就提供了3個分析函數(shù):rand,dense_rank,row_number來解決諸如此類的問題,下面我們來看看這3個分析函數(shù)的作用以及彼此之間的區(qū)別:

Rank,Dense_rank,Row_number函數(shù)為每條記錄產(chǎn)生一個從1開始至N的自然數(shù),N的值可能小于等于記錄的總數(shù)。這3個函數(shù)的唯一區(qū)別在于當(dāng)碰到相同數(shù)據(jù)時的排名策略。

①ROW_NUMBER:

Row_number函數(shù)返回一個唯一的值,當(dāng)碰到相同數(shù)據(jù)時,排名按照記錄集中記錄的順序依次遞增。

②DENSE_RANK:
Dense_rank函數(shù)返回一個唯一的值,除非當(dāng)碰到相同數(shù)據(jù)時,此時所有相同數(shù)據(jù)的排名都是一樣的。

③RANK:
Rank函數(shù)返回一個唯一的值,除非遇到相同的數(shù)據(jù)時,此時所有相同數(shù)據(jù)的排名是一樣的,同時會在最后一條相同記錄和下一條不同記錄的排名之間空出排名。

這樣的介紹有點難懂,我們還是通過實例來說明吧,下面的例子演示了3個不同函數(shù)在遇到相同數(shù)據(jù)時不同排名策略:

 

復(fù)制代碼 代碼如下:
SQL> select region_id, customer_id, sum(customer_sales) total,
         rank() over(order by sum(customer_sales) desc) rank,
         dense_rank() over(order by sum(customer_sales) desc) dense_rank,
         row_number() over(order by sum(customer_sales) desc) row_number
    from user_order
   group by region_id, customer_id;

 

 REGION_ID CUSTOMER_ID      TOTAL       RANK DENSE_RANK ROW_NUMBER
---------- ----------- ---------- ---------- ---------- ----------
         
         8          18                1253840         11         11         11
         5           2                 1224992         12         12         12
         9          23                1224992         12         12         13
         9          24                1224992         12         12         14
        10          30               1216858         15           13            15
 

30 rows selected.

請注意上面的綠色高亮部分,這里生動的演示了3種不同的排名策略:

①對于第一條相同的記錄,3種函數(shù)的排名都是一樣的:12

②當(dāng)出現(xiàn)第二條相同的記錄時,Rank和Dense_rank依然給出同樣的排名12;而row_number則順延遞增為13,依次類推至第三條相同的記錄

③當(dāng)排名進(jìn)行到下一條不同的記錄時,可以看到Rank函數(shù)在12和15之間空出了13,14的排名,因為這2個排名實際上已經(jīng)被第二、三條相同的記錄占了。而Dense_rank則順序遞增。row_number函數(shù)也是順序遞增

比較上面3種不同的策略,我們在選擇的時候就要根據(jù)客戶的需求來定奪了:

①假如客戶就只需要指定數(shù)目的記錄,那么采用row_number是最簡單的,但有漏掉的記錄的危險

②假如客戶需要所有達(dá)到排名水平的記錄,那么采用rank或dense_rank是不錯的選擇。至于選擇哪一種則看客戶的需要,選擇dense_rank或得到最大的記錄

三、使用分析函數(shù)為記錄進(jìn)行分組排名:

上面的排名是按訂單總額來進(jìn)行排列的,現(xiàn)在跟進(jìn)一步:假如是為各個地區(qū)的訂單總額進(jìn)行排名呢?這意味著又多了一次分組操作:對記錄按地區(qū)分組然后進(jìn)行排名。幸虧Oracle也提供了這樣的支持,我們所要做的僅僅是在over函數(shù)中order by的前面增加一個分組子句:partition by region_id。

 

復(fù)制代碼 代碼如下:
SQL> select region_id, customer_id,
               sum(customer_sales) total,
         rank() over(partition by region_id
                        order by sum(customer_sales) desc) rank,
         dense_rank() over(partition by region_id
                        order by sum(customer_sales) desc) dense_rank,
         row_number() over(partition by region_id
                        order by sum(customer_sales) desc) row_number
    from user_order
   group by region_id, customer_id;

 

 REGION_ID CUSTOMER_ID      TOTAL       RANK DENSE_RANK ROW_NUMBER
---------- ----------- ---------- ---------- ---------- ----------
         5           4                1878275          1          1          1
         5           2                1224992          2          2          2
         5           5                1169926          3          3          3
         6           6                1788836          1          1          1
         6           9                1208959          2          2          2
         6          10               1196748          3          3          3      
 

30 rows selected.

現(xiàn)在我們看到的排名將是基于各個地區(qū)的,而非所有區(qū)域的了!Partition by 子句在排列函數(shù)中的作用是將一個結(jié)果集劃分成幾個部分,這樣排列函數(shù)就能夠應(yīng)用于這各個子集。

前面我們提到的5個問題已經(jīng)解決了2個了(第1,2),剩下的3個問題(Top/Bottom N,F(xiàn)irst/Last, NTile)會在下一篇講解。

以上就是Oracle中Rank, Dense_rank, row_number各個函數(shù)用法的全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到oracle教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
欧美激情在线播放| 国产日韩一区二区在线| 国产综合色香蕉精品| 日本一区二区不卡| 熟妇无码乱子成人精品| 性感美女一区二区在线观看| 久久久久久亚洲精品中文字幕| 少妇高潮一区二区三区99| 性xxxx18| 亚洲91av| 97**国产露脸精品国产| 成人精品国产福利| 宅男在线精品国产免费观看| 欧美高跟鞋交xxxxhd| 国产在线精品播放| 国产ts人妖调教重口男| 色噜噜狠狠成人中文综合| 好吊妞www.84com只有这里才有精品| 男男视频在线观看网站| 野外性xxxxfreexxxxx欧美| 九九久久精品这里久久网| 国产无遮挡裸体免费视频| 手机在线免费观看av| 欧美午夜精品一区二区三区电影| 理论片一区二区在线| 美女福利视频一区| 欧洲性视频在线播放| 久久综合社区| 无码人妻一区二区三区一| 亚洲国产日韩一区二区| 日韩欧美一区二区在线观看| 成人久久电影| 动漫av一区二区三区| 亚洲乱码精品久久久久..| 好男人www在线视频| 黄色av免费在线观看| 久久久久久亚洲中文字幕无码| 欧美日韩国产美女| 久久精品123| 欧美丝袜足交| 天堂av资源在线观看| 精品久久久久久久久久久aⅴ| 国产精品欧美激情在线播放| 在线电影院国产精品| www.久久热.com| 欧美色视频日本高清在线观看| 欧美中文高清| 日韩一级片大全| 久久久久久久久久久国产精品| 国产精品久久久久久久乖乖| 国产精品久久久久久av福利软件| 亚洲国产91视频| 亚洲小说春色综合另类网蜜桃| 韩国无码av片在线观看网站| 亚洲黄色三级视频| 欧美影院在线播放| 午夜精品久久久久久久99| 91久久久久久久久久久久久| 欧美精品一区二区三区很污很色的| 成人h动漫精品一区二区| 亚洲精品免费av| 亚洲免费av网站| 成人精品久久av网站| 精品爆乳一区二区三区无码av| 日韩一区二区不卡| 精品一区二区三区五区六区七区| 日韩免费视频线观看| 日韩精品视频在线观看视频| av电影院在线看| 欧美波霸videosex极品| 亚洲国产精品日韩专区av有中文| 精品肉辣文txt下载| 亚洲第一搞黄网站| 欧美tickling挠脚心丨vk| 国产高清精品一区二区| 91沈先生在线观看| 欧美自拍偷拍一区二区| 亚洲人成网站在线播| 99视频有精品高清视频| 亚洲精品中字| 欧美中文字幕一区二区| 国产在线精品一区免费香蕉| 免费人成网站在线观看欧美高清| 日韩女优人人人人射在线视频| www夜片内射视频日韩精品成人| 国产激情一区二区三区四区| 精品国产午夜福利| 日韩一区国产二区欧美三区| 360天大佬第二季在线观看| 久久99久久人婷婷精品综合| jizz免费观看视频| 99久久精品国产一区二区成人| 欧美色图一区二区| 一区二区在线视频| 欧美成人一区二区三区片免费| 欧洲一区二区三区精品| 亚洲熟女综合色一区二区三区| 亚洲www永久成人夜色| 亚洲品质自拍视频网站| 欧美日本韩国一区二区三区| 国产精品久久久久一区二区三区| 97久久夜色精品国产九色| 网站黄在线观看| 99久久国产宗和精品1上映| 日本亚洲精品| 手机看片国产日韩| 免费一二一二在线视频| 亚洲人成电影网站色www| 亚洲日本青草视频在线怡红院| 天堂社区 天堂综合网 天堂资源最新版| 国产又粗又猛又色又| 午夜视频在线观看免费视频| 日本视频在线观看免费| 亚洲精品第二页| 亚洲男人av在线| 国产激情视频一区二区在线观看| 国产ts在线播放| 精品午夜一区二区三区在线观看| 午夜精品一区二区三区在线视频| 国产福利免费视频| 97精品视频在线| 亚洲少妇中文字幕| 最近中文字幕mv在线一区二区三区四区| 成人免费淫片aa视频免费| 9久久9毛片又大又硬又粗| 欧美精品一区二区三区视频| 91九色在线观看| 肉大捧一出免费观看网站在线播放| 欧美系列精品| 不卡视频一二三四| 性生交大片免费看l| 牛牛精品视频在线| 国产三级视频网站| 真人抽搐一进一出视频| 国产乱码精品一区二区三区av| 日本a级c片免费看三区| 国产精品久久久久久免费| 亚洲欧美视频在线观看视频| 久久精品视频在线观看免费| 国产日韩欧美一区二区三区乱码| 日韩在线资源| 四色最新网址| 色先锋最新资源| 日本黄在线观看| 欧美日韩国产精选| 国产麻豆剧传媒精品国产| 亚洲电影在线看| 日韩精品一区二区三区久久| 日韩精品免费综合视频在线播放| 国产精品香蕉一区二区三区| 日韩一区二区三区视频在线观看| 午夜欧美大尺度福利影院在线看| 91一区二区在线观看| 亚洲第一福利一区| 久久99久久久欧美国产| 26uuu国产精品视频| 精品亚洲aⅴ无码一区二区三区| 欧美性猛交xxxx乱大交丰满| www亚洲天堂| 独立日3在线观看完整版| 夜夜嗨av一区二区三区中文字幕| 成人在线免费视频观看| 欧美日韩黄色| 成人性视频欧美一区二区三区| 国产区成人精品视频| 亚洲国产中文字幕在线| 蜜臀久久99精品久久久| 国产一区二区三区不卡免费观看| 免费色视频在线观看| 国语对白永久免费| 午夜欧美视频在线观看| 亚洲精品美女视频| 欧美wwwsss9999| japanese日本护士撒尿| 国产白嫩美女无套久久| 日本不卡视频一二三区| av中文资源在线资源免费观看| 国产精品久久毛片| a级片国产精品自在拍在线播放| 在线视频精品一| av无码精品一区二区三区| 国产精品激情av电影在线观看| 国产精品高颜值在线观看| 国产.欧美.日韩| 精品伊人久久久| 蜜桃视频www网站在线观看| 亚洲色图日韩精品| 午夜欧美理论片| 精品国产高清自在线一区二区三区| 亚洲美女福利视频网站| 精品国产av鲁一鲁一区| 国产sm精品调教视频网站| 性猛交xxxx乱大交孕妇印度| 人妻熟女一二三区夜夜爱| 精品人妻无码一区二区三区换脸| 影视先锋av资源站| 欧美日韩免费高清一区色橹橹| 影音先锋日韩有码| 在线观看v片| 欧美精品一区二区三区久久| 亚洲国产精品久久久| 成人一二三区| 肥臀熟女一区二区三区| 久久av红桃一区二区禁漫| 亚洲一区二区天堂| 中文字幕2018| 少妇**av毛片在线看| 国产精品美女久久久久人| 中文字幕欧美日韩在线| 中文字幕日韩国产| 99精品视频在线免费播放| 国产福利拍拍拍| 国产一区二区免费电影| www久久日com| 欧美视频二区36p| 国产又粗又长又爽| 精品系列免费在线观看| 中文字幕色一区二区| 亚洲精彩视频| 中文字幕字幕中文在线中不卡视频| 一区二区三区不卡视频在线观看| 国产精品网站在线播放| 国精品人伦一区二区三区蜜桃| 欧美日韩亚洲国产一区| 国产精品色噜噜| www.超碰97.com| 天天干天天色天天干| 亚洲人妻一区二区| 美女脱光内衣内裤视频久久网站| 国产精品毛片va一区二区三区| 69久久夜色精品国产69乱青草| 久久成人综合视频| 软萌小仙自慰喷白浆| 久久久久久91精品色婷婷| 欧美影院视频| 中文字幕日本精品| 2020国产精品久久精品不卡| zzzwww在线看片免费| 欧美伊人久久大香线蕉综合69| 69精品丰满人妻无码视频a片| 中文字幕国产在线| 日韩美女中文字幕| 国产日韩精品在线播放| 国产精品福利导航| 国产中文一区二区三区| 国产日产高清欧美一区二区三区| 性欧美hd调教| 久久9热精品视频| 色综合久久影院| 日本中文在线观看| 亚洲综合小说| 超碰91人人草人人干| 永久免费观看精品视频| 91视频这里只有精品| 精品国产亚洲一区二区三区大结局| dy888亚洲精品一区二区三区| 亚洲欧美日韩国产| 天堂一区二区三区四区| av在线免费观看网| 精品无人区麻豆乱码久久久| 大地资源第二页在线观看高清版| 日韩欧美一区二区三区在线视频| 女人公敌韩国| 狠狠色成人综合网图片区| 资源网第一页久久久| 日韩欧美在线观看强乱免费| 精品国内亚洲在观看18黄| 伊人色综合网| 国产精品毛片视频| 忘忧草在线影院两性视频| 日本久久高清视频| 扒开腿狂躁女人爽出白浆2| 黄视频在线观看www| 免费黄频在线观看| 国产又黄又粗又猛又爽的视频| 91九色最新地址| 一区一区视频| 成人精品福利视频| 久久国产精品网| 日韩成人影院| 久久久久久久久久久人体| 久久午夜夜伦鲁鲁一区二区| 久热这里只有精品6| 午夜精品久久久久久久99| www.欧美色| 妖精视频成人观看www| 一区二区三区av在线| 国产精品h在线观看| 永久免费av片在线观看全网站| 超级碰碰视频| 日韩中文字幕91| 精品欧美久久久| 丁香资源影视免费观看| 午夜影院网站| 亚洲欧美精品一区二区| 免费超碰在线| 日韩网站在线免费观看| 欧美日本一区二区视频在线观看| 97视频中文字幕| 蜜桃视频在线观看播放| 日本va欧美va精品发布| 亚洲国产精品123| 亚洲特级黄色片| 日韩精品一区二区亚洲av| 三区在线观看| 国产一级黄色av| 一区二区三区蜜桃网| 欧美美女在线| 黄色网在线免费观看| 蜜桃视频在线观看一区二区| 热99re久久精品这里都是免费| jvid福利在线一区二区| www.wu福利视频18| 青青青视频在线免费观看| 日本一区二区三区国色天香| 精品久久五月天| 亚洲欧美一区二区三区久久| 国产资源精品在线观看| 亚洲av无码国产精品永久一区| 久久中文字幕一区二区| 最新天堂在线视频| 免费大片在线观看www| 国产成人精品自线拍| 日本特级黄色片| 影视亚洲一区二区三区| jizzjizzjizz中国| 1769视频在线播放免费观看| 性一交一乱一色一免费无遮挡|