group by 後使用 rollup 子句總結

group by 使用 rollup 子句總結函數

1、如何理解group by rollup 子句所產生的效果spa

group by 後帶 rollup 子句的功能能夠理解爲:先按必定的規則產生多種分組,而後按各類分組統計數據(至於統計出的數據是求和仍是最大值仍是平均值等這就取決於SELECT後的聚合函數)。所以要搞懂group by 後帶 rollup 子句的用法主要是搞懂它是如何按必定的規則產生多種分組的group by rollup 子句所返回的結果集,能夠理解爲各個分組所產生的結果集的並集且沒有去掉重複數據。下面舉例說明:rollup

一、 對比沒有帶rollup goup by二進制

例:Group by  A ,B im

產生的分組種數:1種;統計

group by  A,B總結

返回結果集:也就是這一種分組的結果集。數據

 

二、 rollup group by rollup 之間沒有任何內容di

1Group by  rollup(A ,B)ping

產生的分組種數:3 種;

第一種:group by  A,B

第二種:group by  A

第三種:group by  NULL

(說明:本沒有group by  NULL  的寫法,在這裏指是爲了方便說明,而採用之。含義是:沒有分組,也就是全部數據作一個統計。例如聚合函數是SUM的話,那就是對全部知足條件的數據進行求和。此寫法的含義下同)

返回結果集:爲以上三種分組統計結果集的並集且未去掉重複數據。

 

2Group by  rollup(A ,B,C)

產生的分組種數:4 種;

第一種:group by  A,B,C

第二種:group by  A,B

第三種:group by  A

第四種:group by  NULL

返回結果集:爲以上四種分組統計結果集的並集且未去掉重複數據。

 

三、 rollup group by rollup 之間還包含有列信息

1Group by  A , rollup(A ,B)

產生的分組種數:3 種;

第一種:group by  A,A,B     等價於 group by  A,B

第二種:group by  A,A       等價於 group by  A

第三種:group by  A,NULL   等價於 group by  A

返回結果集:爲以上三種分組統計結果集的並集且未去掉重複數據。

 

2Group by  C , rollup(A ,B)

產生的分組種數:3 種;

第一種:group by  C,A,B    

第二種:group by  C,A      

第三種:group by  C,NULL   等價於 group by  C

返回結果集:爲以上三種分組統計結果集的並集且未去掉重複數據。

 

四、 rollup rollup子句括號內又使用括號對列進行組合

1Group by  rollup((A ,B))

產生的分組種數:2 種;

第一種:group by  A,B

第二種:group by  NULL

返回結果集:爲以上兩種分組統計結果集的並集且未去掉重複數據。

 

2Group by  rollup(A ,(B,C))

產生的分組種數:3 種;

第一種:group by  A,B,C

第二種:group by  A

第三種:group by  NULL

返回結果集:爲以上三種分組統計結果集的並集且未去掉重複數據。

   注:對這種狀況,能夠理解爲幾個列被括號括在一塊兒時,就只能被當作一個總體,分組時不須要再細化。所以也可推斷rollup括號內也頂多加到一重括號,加多重了應該沒有任何意義(這個推斷我沒有作驗證的哦)。

 

2、與rollup組合使用的其它幾個輔助函數

1grouping()函數

   必須接受一列且只能接受一列作爲其參數。參數列值爲空返回1,參數列值非空返回0

2grouping_id()函數

   必須接受一列或多列作爲其參數。

返回值爲按參數排列順序,依次對各個參數使用grouping()函數,並將結果值依次串成一串二進制數而後再轉化爲十進制所獲得的值。

例如:grouping(A) = 0 ; grouping(B) = 1;

      則:grouping_id(A,B)  =  (01)2  = 1;

                     grouping_id(B,A)  =  (10)2  =2;

3group_id()函數

   調用時不須要且不能傳入任何參數。

返回值爲某個特定的分組出現的重複次數(第一大點中的第3種狀況中每每會產生重複的分組)。重複次數從0開始,例如某個分組第一次出現則返回值爲0,第二次出現時返回值爲1,……,第n次出現返回值爲n-1

        注:使用以上三個函數每每是爲了過濾掉一部分統計數據,而達到美化統計結果的做用。

 

3、group by 後帶rollup子句 group by 後帶cube子句區別

group by 後帶rollup子句與 group by 後帶cube子句的惟一區別就是:

cube子句的group by 會產生更多的分組統計數據。cube後的列有多少種組合(注意組合是與順序無關的)就會有多少種分組。

例:Group by  cube(A ,B,C)

產生的分組種數:8 種;

第一種:group by  A,B,C

第二種:group by  A,B

第三種:group by  A,C

第四種:group by  B,C

第五種:group by  C

第六種:group by  B

第七種:group by  A

第八種:group by  NULL

返回結果集:爲以上八種分組統計結果集的並集且未去掉重複數據。

 

4、group by 後帶grouping sets子句

    group by 後帶grouping sets子句效果就是隻返回小記記錄,即只返回按單個列分組後的統計數據,不返回多個列組合分組的統計數據。

1Group by  grouping sets(A )

產生的分組種數:1 種;

第一種:group by  A

返回結果集:即爲以上一種分組的統計結果集。

 

2Group by  grouping sets(A ,B)

產生的分組種數:2 種;

第一種:group by  A

第二種:group by  B

返回結果集:爲以上兩種分組統計結果集的並集且未去掉重複數據。

 

3Group by  grouping sets (A ,B,C)

產生的分組種數:3 種;

第一種:group by  A

第二種:group by  B

第三種:group by  C

返回結果集:爲以上三種分組統計結果集的並集且未去掉重複數據。

相關文章
相關標籤/搜索