最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
rollup函數(shù)和cube函數(shù)的區(qū)別?
    有的小伙伴會發(fā)現(xiàn)在數(shù)據(jù)統(tǒng)計報表的時候會經(jīng)常在最后對列進(jìn)行一個匯總,那么在oracle中是那些函數(shù)來實現(xiàn)匯總的呢?今天就來講一下rollup函數(shù)和cube函數(shù)的區(qū)分。
首先,創(chuàng)建一張表tmp1,數(shù)據(jù)如下:

rollup函數(shù) 和cube函數(shù) 的區(qū)別?
那么,我們先看一下cube匯總出來的數(shù)據(jù)是什么樣子的吧?
select t_class,t_address,(t_number) t_number from tmp1 group by cube(t_class,t_address);
rollup函數(shù) 和cube函數(shù) 的區(qū)別?
有的小伙伴可能已經(jīng)發(fā)現(xiàn)了,cube函數(shù)匯總的數(shù)據(jù)相當(dāng)于把所有的可能性的數(shù)據(jù)匯總了出來。沒錯,其實這條sql語句相當(dāng)于以下的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年積累的網(wǎng)站建設(shè)、網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有潯陽免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

那么,現(xiàn)在我們看一下rollup匯總出來的數(shù)據(jù)是什么樣子的吧?
select t_class,t_address,(t_number) t_number from tmp1 group by rollup(t_class,t_address);
rollup函數(shù) 和cube函數(shù) 的區(qū)別?
有的小伙伴可能已經(jīng)發(fā)現(xiàn)了,rollup函數(shù)匯總的數(shù)據(jù)也可以用union all語句來實現(xiàn):
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;

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

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

另外,當(dāng)實際表中也存在null值時,如何區(qū)分cube和rollup運算符所生成的null值呢?這時我們可以用grouping函數(shù)來區(qū)分,這里我們就舉一個簡單的例子來區(qū)分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函數(shù) 和cube函數(shù) 的區(qū)別?
從圖中可以看到grouping(t_class)列中有0和1兩個數(shù)字,其中1表示由rollup運算符造成的null值,其余null值為事實數(shù)據(jù)的空值。事實上grouping是一個聚合函數(shù),它產(chǎn)生了一個附加的列,當(dāng)用cube或rollup運算符添加行時,附加的列值為1;當(dāng)所添加的行不是由cube或rollup產(chǎn)生時,附加列值為0.

希望對大家能有所幫助!


分享標(biāo)題:rollup函數(shù)和cube函數(shù)的區(qū)別?
標(biāo)題來源:http://fisionsoft.com.cn/article/jeiese.html