group by 作为一种分组查询,在sql中用处十分广泛。其中的简单用法,这里不再进行赘述,这篇文章,主要是研究 group by 的 rollup ,cube以及grouping sets
测试的表如下图所示
理解:先按照一定的规则产生多种分组,然后按照各组统计数据
按上述例子来说:
有三种分组
1:group by null,即,只统计数据,没有进行分组
2:group by cust_code,即,只按照cust_code进行分组
3:group by cust_code,toba_code即,相当于没写rollup
最终的结果为:三种结果的并集
分组的规律:
分组的种类数为:rollup后面的字段数 + 1
Group by rollup(A,B,C,D....)
1.group by null
2.group by A
3.group by A,B
4.group by A,B,C
5.group by A,B,C,D
6. ....
每一种分组的个数为:group by 后面字段在 【所查询数据】的种类数
以上述例子来说:
所查询数据为:
select sum(toba_num),cust_code,toba_code fromgroupbytest
第一种分组的个数:永远是一个
第二种分组的个数:cust_code在【所查询数据】的种类数为2个
第三种分组的个数:(cust_code,toba_code)在【所查询数据】的种类数为6个
所以一共有九个数据。
Cube:多维数据集。然后执行下面的sql语句
select sum(toba_num),cust_code,toba_code fromgroupbytest group by cube (cust_code,toba_code)
得到的结果,如下图所示
理解:先按照一定的规则产生多种分组,然后按照各组统计数据
按上述例子来说:
有四种分组
1:group by null,即,只统计数据,没有进行分组
2:group by cust_code,即,只按照cust_code进行分组
3:group by toba_code,即,只按照toba_code进行分组
4:group by cust_code,toba_code即,相当于没写cube
最终的结果为:四种结果的并集
分组的种类数为:
n为:cube括号里面的字段数
如:Group by rollup(A,B,C),首先会产生8个分组,分别为:
1.group by null,即,只统计数据,没有进行分组
2.group by A,即,只按照A进行分组
3.group by B,即,只按照B进行分组
4.group by C,即,只按照C进行分组
5.group by A,C,即,按照A,C进行分组
6.group by A,B,即,按照A,B进行分组
7.group by B,C,即,按照B,C进行分组
8.group by A,B,C,即,相当于没写cube
每一种分组的个数为:跟rollup相同
Grouping sets:分组设置/集。然后执行下面的sql语句
select sum(toba_num),cust_code,toba_code fromgroupbytest group by grouping sets(cust_code,toba_code)
结果如下图所示理解:先按照一定的规则产生多种分组,然后按照各组统计数据
按上述例子来说:
有两种分组
1:group by cust_code,即,只按照cust_code进行分组
2:group by toba_code,即,只按照toba_code进行分组
最终的结果为:两种结果的并集
分组的规律:
分组的种类数为:grouping sets括号里面的字段数
Group by grouping sets(A,B,C,D....)
1.group by A
2.group by B
3.group by C
4.group by D
5. ....
每一组分组的种类数为:同rollup