group by 高级用法超详细总结

group by 作为一种分组查询,在sql中用处十分广泛。其中的简单用法,这里不再进行赘述,这篇文章,主要是研究 group by 的 rollup ,cube以及grouping sets

测试的表如下图所示

group by 高级用法超详细总结_第1张图片

group by rollup 

首先解释一下 rollup的中文意思为:归纳,汇总的意思。
执行这个语句       select sum (toba_num ),cust_code ,toba_code  fromgroupbytest  group by rollup   (cust_code ,toba_code )
得到的结果如下图所示
group by 高级用法超详细总结_第2张图片

理解:先按照一定的规则产生多种分组,然后按照各组统计数据

按上述例子来说:

有三种分组

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

所以一共有九个数据。


group by cube

Cube:多维数据集。然后执行下面的sql语句

select sum(toba_num),cust_code,toba_code fromgroupbytest group by cube (cust_code,toba_code)

得到的结果,如下图所示

group by 高级用法超详细总结_第3张图片

理解:先按照一定的规则产生多种分组,然后按照各组统计数据

按上述例子来说:

有四种分组

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相同


group by grouping sets

Grouping sets:分组设置/集。然后执行下面的sql语句

select sum(toba_num),cust_code,toba_code fromgroupbytest group by grouping sets(cust_code,toba_code)

结果如下图所示
group by 高级用法超详细总结_第4张图片

理解:先按照一定的规则产生多种分组,然后按照各组统计数据

按上述例子来说:

有两种分组

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

特别注意

不管是 rollup,还是cube,还是grouping sets,以rollup 举例:
group by rollup((A,B),C,D),这种情况下A,B是一个整体,具体是什么意思,请大家自己动手实验一下,自己理解一下,毕竟纸上得来终觉浅。。。。




你可能感兴趣的:(sql)