婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Oracle開發(fā)之分析函數(shù)(Top/Bottom N、First/Last、NTile)

Oracle開發(fā)之分析函數(shù)(Top/Bottom N、First/Last、NTile)

熱門標(biāo)簽:山東crm外呼系統(tǒng)軟件 百度地圖標(biāo)注途經(jīng)點 地圖標(biāo)注養(yǎng)老院 開發(fā)外呼系統(tǒng) 哪個400外呼系統(tǒng)好 慧營銷crm外呼系統(tǒng)丹丹 哈爾濱電話機器人銷售招聘 愛客外呼系統(tǒng)怎么樣 圖吧網(wǎng)站地圖標(biāo)注

一、帶空值的排列:

在前面《Oracle開發(fā)之分析函數(shù)(Rank、Dense_rank、row_number)》一文中,我們已經(jīng)知道了如何為一批記錄進(jìn)行全排列、分組排列。假如被排列的數(shù)據(jù)中含有空值呢?

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

 REGION_ID CUSTOMER_ID CUST_SALES  RAN_TOTAL       RANK
---------- ----------- ---------- ---------- ----------
        10          31                    6238901          1
        10          26    1808949    6238901          2
        10          27    1322747    6238901          3
        10          30    1216858    6238901          4
        10          28     986964    6238901          5
        10          29     903383    6238901          6

我們看到這里有一條記錄的CUST_TOTAL字段值為NULL,但居然排在第一名了!顯然這不符合情理。所以我們重新調(diào)整完善一下我們的排名策略,看看下面的語句:

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

 REGION_ID CUSTOMER_ID CUST_TOTAL  REG_TOTAL       RANK
---------- ----------- ---------- ---------- ----------
        10          26    1808949     6238901           1
        10          27    1322747    6238901           2
        10          30    1216858    6238901           3
        10          28     986964     6238901           4
        10          29     903383     6238901           5
        10          31     6238901                           6

綠色高亮處,NULLS LAST/FIRST告訴Oracle讓空值排名最后后第一。

注意是NULLS,不是NULL。

二、Top/Bottom N查詢:

在日常的工作生產(chǎn)中,我們經(jīng)常碰到這樣的查詢:找出排名前5位的訂單客戶、找出排名前10位的銷售人員等等。現(xiàn)在這個對我們來說已經(jīng)是很簡單的問題了。下面我們用一個實際的例子來演示:

【1】找出所有訂單總額排名前3的大客戶:

復(fù)制代碼 代碼如下:
SQL> select *
  from (select region_id,
               customer_id,
               sum(customer_sales) cust_total,
               rank() over(order by sum(customer_sales) desc NULLS LAST) rank
         from user_order
         group by region_id, customer_id)
  where rank = 3;

 REGION_ID CUSTOMER_ID CUST_TOTAL       RANK
---------- ----------- ---------- ----------
         9          25    2232703          1
         8          17    1944281          2
         7          14    1929774          3

SQL>

【2】找出每個區(qū)域訂單總額排名前3的大客戶:

復(fù)制代碼 代碼如下:
SQL> select *
    from (select region_id,
                 customer_id,
                 sum(customer_sales) cust_total,
                 sum(sum(customer_sales)) over(partition by region_id) reg_total,
                 rank() over(partition by region_id
                                order by sum(customer_sales) desc NULLS LAST) rank
            from user_order
           group by region_id, customer_id)
   where rank = 3;

 REGION_ID CUSTOMER_ID CUST_TOTAL  REG_TOTAL       RANK
---------- ----------- ---------- ---------- ----------
         5           4    1878275    5585641          1
         5           2    1224992    5585641          2
         5           5    1169926    5585641          3
         6           6    1788836    6307766          1
         6           9    1208959    6307766          2
         6          10    1196748    6307766          3
         7          14    1929774    6868495          1
         7          13    1310434    6868495          2
         7          15    1255591    6868495          3
         8          17    1944281    6854731          1
         8          20    1413722    6854731          2
         8          18    1253840    6854731          3
         9          25    2232703    6739374          1
         9          23    1224992    6739374          2
         9          24    1224992    6739374          2
        10          26    1808949    6238901          1
        10          27    1322747    6238901          2
        10          30    1216858    6238901          3

18 rows selected.

三、First/Last排名查詢:

想象一下下面的情形:找出訂單總額最多、最少的客戶。按照前面我們學(xué)到的知識,這個至少需要2個查詢。第一個查詢按照訂單總額降序排列以期拿到第一名,第二個查詢按照訂單總額升序排列以期拿到最后一名。是不是很煩?因為Rank函數(shù)只告訴我們排名的結(jié)果,卻無法自動替我們從中篩選結(jié)果。

幸好Oracle為我們在排列函數(shù)之外提供了兩個額外的函數(shù):first、last函數(shù),專門用來解決這種問題。還是用實例說話:

復(fù)制代碼 代碼如下:
SQL> select min(customer_id)
         keep (dense_rank first order by sum(customer_sales) desc) first,
         min(customer_id)
         keep (dense_rank last order by sum(customer_sales) desc)
last
    from user_order
   group by customer_id;

     FIRST       LAST
---------- ----------
        31          1

這里有幾個看起來比較疑惑的地方:

①為什么這里要用min函數(shù)
②Keep這個東西是干什么的
③fist/last是干什么的
④dense_rank和dense_rank()有什么不同,能換成rank嗎?

首先解答一下第一個問題:min函數(shù)的作用是用于當(dāng)存在多個First/Last情況下保證返回唯一的記錄。假如我們?nèi)サ魰惺裁礃拥暮蠊兀?br />

復(fù)制代碼 代碼如下:
SQL> select keep (dense_rank first order by sum(customer_sales) desc) first,
             keep (dense_rank last order by sum(customer_sales) desc) last
    from user_order
   group by customer_id;
select keep (dense_rank first order by sum(customer_sales) desc) first,
                        *

ERROR at line 1:
ORA-00907: missing right parenthesis

接下來看看第2個問題:keep是干什么用的?從上面的結(jié)果我們已經(jīng)知道Oracle對排名的結(jié)果只“保留”2條數(shù)據(jù),這就是keep的作用。告訴Oracle只保留符合keep條件的記錄。

那么什么才是符合條件的記錄呢?這就是第3個問題了。dense_rank是告訴Oracle排列的策略,first/last則告訴最終篩選的條件。

第4個問題:如果我們把dense_rank換成rank呢?

復(fù)制代碼 代碼如下:
SQL> select min(region_id)
          keep(rank first order by sum(customer_sales) desc) first,
         min(region_id)
          keep(rank last order by sum(customer_sales) desc) last
    from user_order
   group by region_id;
select min(region_id)
*

ERROR at line 1:
ORA-02000: missing DENSE_RANK

四、按層次查詢:

現(xiàn)在我們已經(jīng)見識了如何通過Oracle的分析函數(shù)來獲取Top/Bottom N,第一個,最后一個記錄。有時我們會收到類似下面這樣的需求:找出訂單總額排名前1/5的客戶。

很熟悉是不?我們馬上會想到第二點中提到的方法,可是rank函數(shù)只為我們做好了排名,并不知道每個排名在總排名中的相對位置,這時候就引入了另外一個分析函數(shù)NTile,下面我們就以上面的需求為例來講解一下:

復(fù)制代碼 代碼如下:
SQL> select region_id,
         customer_id,
         ntile(5) over(order by sum(customer_sales) desc) til
    from user_order
   group by region_id, customer_id;

 REGION_ID CUSTOMER_ID       TILE
---------- ----------- ----------
        10          31          1
         9          25           1
        10          26          1
         6           6            1        
         8          18           2
         5           2            2
         9          23           3
         6           9            3
         7          11           3
         5           3            4
         6           8            4
         8          16           4
         6           7            5
        10          29          5
         5           1            5

Ntil函數(shù)為各個記錄在記錄集中的排名計算比例,我們看到所有的記錄被分成5個等級,那么假如我們只需要前1/5的記錄則只需要截取TILE的值為1的記錄就可以了。假如我們需要排名前25%的記錄(也就是1/4)那么我們只需要設(shè)置ntile(4)就可以了。

以上就是Oracle中前幾名、后幾名、最多、最少以及按層次查詢的全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Oracle開發(fā)之分析函數(shù)總結(jié)
  • Oracle開發(fā)之分析函數(shù)(Rank, Dense_rank, row_number)
  • Oracle開發(fā)之分析函數(shù)簡介Over用法
  • 深入探討:oracle中row_number() over()分析函數(shù)用法
  • Oracle 分析函數(shù)RANK(),ROW_NUMBER(),LAG()等的使用方法
  • 常用Oracle分析函數(shù)大全

標(biāo)簽:周口 武漢 承德 甘肅 開封 和田 青島 固原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle開發(fā)之分析函數(shù)(Top/Bottom N、First/Last、NTile)》,本文關(guān)鍵詞  Oracle,開,發(fā)之,分析,函數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle開發(fā)之分析函數(shù)(Top/Bottom N、First/Last、NTile)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle開發(fā)之分析函數(shù)(Top/Bottom N、First/Last、NTile)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一区二区三区日本| 久久综合久色欧美综合狠狠| 欧美一二三区精品| 色婷婷精品大视频在线蜜桃视频| 91在线免费播放| 亚洲成人一区二区在线观看| 7777精品伊人久久久大香线蕉| 国产九色sp调教91| 1024国产精品| 日韩午夜在线影院| 成人综合激情网| 五月天精品一区二区三区| 久久亚洲一级片| 色综合久久综合| 老司机一区二区| 亚洲色图清纯唯美| 91国偷自产一区二区三区观看 | 欧美三级日本三级少妇99| 日韩精品色哟哟| 一区二区成人在线| 久久久99久久精品欧美| 91久久精品一区二区三区| 成人性生交大片免费看中文网站| 亚洲一区二三区| 欧美国产日韩精品免费观看| 精品国产区一区| 欧美体内she精视频| 麻豆91精品91久久久的内涵| 日韩激情在线观看| 一区二区三区在线观看欧美| 中文字幕亚洲精品在线观看| 久久久久久夜精品精品免费| 91精品久久久久久久99蜜桃| 欧美日韩亚洲高清一区二区| 91麻豆国产福利在线观看| 狠狠色丁香婷婷综合| 经典三级一区二区| 午夜精品久久久久久不卡8050| 欧美男同性恋视频网站| 在线免费不卡电影| 97久久精品人人澡人人爽| 成人开心网精品视频| 国产综合一区二区| 日韩高清一区在线| 亚洲综合丁香婷婷六月香| 亚洲欧洲中文日韩久久av乱码| 久久久久久亚洲综合| 精品国产一二三区| 欧美成人精品福利| 91精品国产综合久久精品性色| 日韩三级中文字幕| 欧美麻豆精品久久久久久| 制服.丝袜.亚洲.中文.综合| 欧美日韩在线电影| 欧美视频在线不卡| 精品嫩草影院久久| 极品销魂美女一区二区三区| 亚洲欧美日韩国产手机在线| 欧美国产精品久久| 亚洲精品免费在线播放| 精品久久久久久久人人人人传媒| 亚洲国产欧美在线| 51精品视频一区二区三区| 91美女福利视频| 国模一区二区三区白浆| 欧洲一区在线电影| 欧美白人最猛性xxxxx69交| 国产女人aaa级久久久级| 日本不卡的三区四区五区| 福利一区二区在线观看| av一二三不卡影片| 精品久久久久久久久久久院品网| 国产日韩影视精品| 麻豆精品一区二区| 色综合色综合色综合色综合色综合 | 欧美中文字幕亚洲一区二区va在线| 日韩一区和二区| 中文字幕一区av| 久久国产夜色精品鲁鲁99| 欧美视频在线播放| 国产精品久久久久久久浪潮网站| 亚洲欧美区自拍先锋| 国产91在线观看丝袜| 欧美一区二区三区影视| 伊人婷婷欧美激情| 国产91精品精华液一区二区三区 | 99久久久国产精品| 欧美精彩视频一区二区三区| wwww国产精品欧美| 久久国产精品色婷婷| 99久久er热在这里只有精品15| 51精品国自产在线| 午夜天堂影视香蕉久久| 国产91精品精华液一区二区三区| 欧美丰满一区二区免费视频| 一区二区三区产品免费精品久久75| 国产精品18久久久久久久久 | 在线精品视频一区二区| 亚洲欧美日韩系列| 成人影视亚洲图片在线| 日韩精品在线一区| 久久电影网电视剧免费观看| 91精品国产综合久久小美女| 日韩电影一区二区三区四区| 成人动漫一区二区| 久久精品视频免费| 精品无人码麻豆乱码1区2区| 91精品国产高清一区二区三区| 亚洲国产成人tv| 色88888久久久久久影院按摩| 亚洲伦在线观看| 色综合天天综合网国产成人综合天 | 福利电影一区二区三区| 国产精品久久久久毛片软件| 国产精品亚洲第一| 欧美在线综合视频| 亚洲成人免费av| 欧美在线免费视屏| 三级欧美韩日大片在线看| 欧美少妇一区二区| 亚洲一二三四在线| 欧美一区二区三区影视| 蜜桃传媒麻豆第一区在线观看| 日韩精品中午字幕| 精品亚洲porn| 国产日产欧产精品推荐色| 成人动漫在线一区| 亚洲色欲色欲www在线观看| 91福利小视频| 午夜激情久久久| 日韩一区国产二区欧美三区| 国产一区二区不卡| 国产精品久久久久永久免费观看 | zzijzzij亚洲日本少妇熟睡| 亚洲第一电影网| 理论电影国产精品| 国产亚洲午夜高清国产拍精品| 欧美96一区二区免费视频| 青青草国产精品亚洲专区无| 91精品国模一区二区三区| 美女视频黄 久久| 精品国产乱码久久久久久图片 | 高清av一区二区| 国产精品久久一级| 欧美色综合影院| 奇米影视在线99精品| 国产精品美女久久久久久久网站| 96av麻豆蜜桃一区二区| 亚洲第一久久影院| 久久久久久久久久久久久夜| 顶级嫩模精品视频在线看| 久久精品一区四区| 欧美色图天堂网| 蜜臀av性久久久久蜜臀aⅴ四虎| 中文字幕不卡在线播放| 91猫先生在线| 麻豆精品在线观看| 亚洲靠逼com| 欧美一级片在线| 日本丶国产丶欧美色综合| 日本亚洲一区二区| 国产区在线观看成人精品| 欧美高清视频一二三区| 国产成人在线影院| 秋霞午夜av一区二区三区| 久久久久久久性| 在线亚洲+欧美+日本专区| 国产成人av一区二区三区在线| 亚洲黄色免费网站| 国产欧美日本一区二区三区| 欧美日韩一本到| 久久国产精品区| 亚洲欧美另类在线| 日韩美女一区二区三区四区| 暴力调教一区二区三区| 免费看欧美美女黄的网站| 中文字幕乱码亚洲精品一区 | 欧美日韩一区二区在线视频| 欧美r级在线观看| 日本不卡的三区四区五区| 色哦色哦哦色天天综合| 精品国产一区二区三区久久久蜜月| 亚洲乱码中文字幕综合| 午夜精品久久久久影视| 白白色亚洲国产精品| 欧美大胆一级视频| 亚洲精品第一国产综合野| 日韩精品一级二级 | 性欧美大战久久久久久久久| 国产精品沙发午睡系列990531| 欧美一区二区精品在线| 欧美日韩另类国产亚洲欧美一级| 成人伦理片在线| 久久99精品视频| 亚洲视频在线一区二区| 精品国产3级a| 日韩一区二区三区视频在线| 色婷婷综合久久久中文字幕| av一二三不卡影片| 国产1区2区3区精品美女|