SQL 数据库:GROUPING 运算符
创建测试数据集
假设我们想要实现对不同种类的销售价格进行小计和合计,需要进行UNION,实现如下:
ROLLUP可以同时得出合计和小计。
GROUPING运算符
GROUPING 运算符包含以下 3 种 :
ROLLUP
CUBE
GROUPING SETS
ROLLUP
ROLLUP
可以同时计算合计和小计,合计行记录称为超级分组记录(super group row),默认使用NULL
作为聚合键。SQL 提供了一个用来判断超级分组记录的NULL
的特定函数——GROUPING
函数。该函数在其参数列的值为超级分组记录所产生的NULL
时返回 1,其他情况返回 0,在实际的使用中,GROUPING
函数能够简单地分辨出原始数据中的NULL和超级分组记录中的NULL
。
假设根据商品类型计算销售价格的合计和小计
再假设根据商品类型和登记日期计算销售价格的合计和小计
该SELECT 语句的结果相当于使用 UNION 对如下 3 种模式的聚合级的不同结果进行连接:
GROUP BY ()
GROUP BY (product_type)
GROUP BY (producttype, registdate)
CUBE
所谓 CUBE,就是将 GROUP BY 子句中聚合键的“所有可能的组合”的汇总结果集中到一个结果中。因此,组合的个数就是 ,其中n
是聚合键的个数。
相较于ROLLUP
会多出来regist_date
为聚合键得到的小计结果。
该SELECT 语句的结果相当于使用 UNION 对如下 3 种模式的聚合级的不同结果进行连接:
GROUP BY ()
GROUP BY (product_type)
GROUP BY (
registdate
)
GROUP BY (product_type, registdate)
GROUPING SETS
GROUPING SETS
以用于从 ROLLUP 或者 CUBE 的结果中取出部分记录。
假设取出将商品类型和登记日期各自作为聚合键计算汇总结果,忽略合计结果
参考资料
书籍《SQL基础教程(第2版)》
版权声明: 本文为 InfoQ 作者【大规模数据处理学习者】的原创文章。
原文链接:【http://xie.infoq.cn/article/b33480bc922cd9acb12d1232d】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论