SQL基础之GROUPING

 

grouping sets就是由多个group by联合起来,关系如下。

 

  select A , B from table group by grouping sets(A, B)   等价于

 

  select A , null as B  from table group by A  

 

  union all  

 select null as A ,  B  from table group by B 

2.grouping( )

  grouping函数用来区分NULL值,这里NULL值有2种情况,一是原本表中的数据就为NULL,二是由rollup、cube、grouping sets生成的NULL值。

  当为第一种情况中的空值时,grouping(NULL)返回0;当为第二种情况中的空值时,grouping(NULL)返回1。实例如下,从结果中可以看到第二个结果集中原本为null的数据由于grouping函数为1,故显示ROLLUP-NULL字符串。

3.grouping_id( )

  grouping_id函数也是计算分组级别的函数,注意如果要使用grouping_id函数那必须得有group by字句,而且group by字句的中的列与grouping_id函数的参数必须相等。比如group by A,B,那么必须使用grouping_id(A,B)。下面用一个等效关系来说明grouping_id()与grouping()的联系,grouping_id(A, B)等效于grouping(A) + grouping(B),但要注意这里的+号不是算术相加,它表示的是二进制数据组合在一起,比如grouping(A)=1,grouping(B)=1,那么grouping_id(A, B)=11B,也就是十进制数3。原来的表数据执行下面的sql语句结果太多效果不明显,所以我改了下表数据,不过对比两个结果集效果很明显。

转载:https://www.cnblogs.com/fangyz/p/5813916.html

 

猜你喜欢

转载自www.cnblogs.com/fangqiong/p/12705383.html
今日推荐