天天看點

分組原理(GROUP BY子句)3:CUBE從屬子句

分組原理(GROUP BY子句)3:CUBE從屬子句

若覺得本文寫得還可以,請多多關注本人所作書籍《C++文法詳解》電子工業出版社出版,作者 黃勇,網盤位址:

https://pan.baidu.com/s/1dIxLMN5b91zpJN2sZv1MNg

本文為原創文章,轉載請注明出處,或注明轉載自“黃邦勇帥(原名:黃勇)

四、CUBE從屬子句

1、CUBE從屬子句可位于GROUP BY子句和GROUPING SETS選項内,即,使用形式為GROUP BY CUBE(…)或GROUPING BY GROUPING SETS( CUBE(…)….)

2、CUBE是定義多個分組集的一種簡便方法,為講解友善,在此處引入集合論中的幂集這一概念,集合S的幂集是由S的所有子集組成的集合。CUBE會定義輸入列上的所有可能的分組集(即幂集),包括空分組集,其實,CUBE就是定義了由輸入列所組成的集合的幂集,比如,CUBE (a, b, c)等同于

GROUPING SETS( (a, b, c), (a, b), (a, c), (b, c) ,(a), (b), (c), () )
           

即使用a, b, c三列所有可能的組合進行分組所産生的所有分組集,是以,若CUBE指定了n列,則會生成2n 個分組集。

3、CUBE也可以使用多列定義分組集,即形如CUBE( (a, b), (c, d) )的形式,此時應把(a,b)看作一個整體,(c, d)看作一個整體,是以,等同于

GROUPING SETS ( (a,b,c,d), (a,b), (c, d), () );
           

是以,需要注意的是CBUE(a, b)與CUBE ( (a, b)) 是不同的,後者會把(a, b)看作一個整體進行分組。前者等同于GROUPING SETS( (a, b), (a), (b), () ),後者等同于GROUING SETS( (a, b), () )

4、在同一個GROUP BY子句中,也可以使用逗号分隔的多個CUBE子句,比如,

GROUP BY CUBE (a, b), CUBE(c, d)	
GROUP BY GROUPING SETS( CUBE(a, b), CUBE(c, d, e));
           

該語句的規則,詳見後文。

示例:CUBE從屬子句原理(輸出結果見圖XXX)
SELECT a,b,c,d FROM T4 GROUP BY CUBE( (a, b), (c, d) ) 	--語句1
SELECT a,b,c,d FROM T4 GROUP BY 							--語句2,等效于語句1
GROUPING SETS ( (a, b, c, d), (a,b), (c, d), () );
           
分組原理(GROUP BY子句)3:CUBE從屬子句

作者:黃邦勇帥(原名:黃勇)

分組原理(GROUP BY子句)3:CUBE從屬子句

繼續閱讀