分组原理(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), () );

在这里插入图片描述

作者:黄邦勇帅(原名:黄勇)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hyongilfmmm/article/details/93892270