免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

rollup函數和cube函數的區別?

    有的小伙伴會發現在數據統計報表的時候會經常在最后對列進行一個匯總,那么在oracle中是那些函數來實現匯總的呢?今天就來講一下rollup函數和cube函數的區分。
首先,創建一張表tmp1,數據如下:

rollup函數 和cube函數 的區別?
那么,我們先看一下cube匯總出來的數據是什么樣子的吧?
select t_class,t_address,(t_number) t_number from tmp1 group by cube(t_class,t_address);
rollup函數 和cube函數 的區別?
有的小伙伴可能已經發現了,cube函數匯總的數據相當于把所有的可能性的數據匯總了出來。沒錯,其實這條sql語句相當于以下的union all語句:
select null,null,sum(t_number) t_number from tmp1
union all
select null,t_address,sum(t_number) t_number from tmp1 group by t_address
union all
select t_class,null,sum(t_number) t_number from tmp1 group by t_class
union all
select t_class,t_address,sum(t_number) t_number from tmp1 group by t_class,t_address;

10年積累的網站建設、網站設計經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先建設網站后付款的網站建設流程,更有潯陽免費網站建設讓你可以放心的選擇與我們合作。

那么,現在我們看一下rollup匯總出來的數據是什么樣子的吧?
select t_class,t_address,(t_number) t_number from tmp1 group by rollup(t_class,t_address);
rollup函數 和cube函數 的區別?
有的小伙伴可能已經發現了,rollup函數匯總的數據也可以用union all語句來實現:
select null,null,sum(t_number) t_number from tmp1
union all
select t_class,null,sum(t_number) t_number from tmp1 group by t_class
union all
select t_class,t_address,sum(t_number) t_number from tmp1 group by t_class,t_address;

    **總結:**
    如果使用group by rollup(A,B,C),首先會對(A、B、C)進行GROUP BY,然后對(A、B)進行GROUP BY,然后是(A)進行GROUP BY,最后對全表進行GROUP BY操作。roll up的意思是“卷起”,這也可以幫助我們理解group by rollup就是對選擇的列從右到左以一次少一列的方式進行grouping直到所有列都去掉后的grouping(也就是全表grouping),對于n個參數的rollup,有n+1次的grouping。

cube的意思是立方,對cube的每個參數,都可以理解為取值為參與grouping和不參與grouping兩個值的一個維度,然后所有維度取值組合的集合就是grouping的集合,對于n個參數的cube,有2^n次的grouping。如果使用group by cube(A,B,C),,則首先會對(A、B、C)進行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后對全表進行GROUP BY操作,一共是2^3=8次grouping。

另外,當實際表中也存在null值時,如何區分cube和rollup運算符所生成的null值呢?這時我們可以用grouping函數來區分,這里我們就舉一個簡單的例子來區分t_class列的null值,sql如下:
select t_class,t_address,(t_number) t_number,grouping(t_class) from tmp1

group by rollup(t_class,t_address);
rollup函數 和cube函數 的區別?
從圖中可以看到grouping(t_class)列中有0和1兩個數字,其中1表示由rollup運算符造成的null值,其余null值為事實數據的空值。事實上grouping是一個聚合函數,它產生了一個附加的列,當用cube或rollup運算符添加行時,附加的列值為1;當所添加的行不是由cube或rollup產生時,附加列值為0.

希望對大家能有所幫助!

文章標題:rollup函數和cube函數的區別?
URL地址:http://m.newbst.com/article34/jeiese.html

成都網站建設公司_創新互聯,為您提供全網營銷推廣網站收錄服務器托管域名注冊虛擬主機小程序開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管