分组集的定义是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用"UNION ALL",计算多个结果集的并集 。
分组集种类SQL Server的分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP,其中 CUBE和ROLLUP可以当做是GROUPING SETS的简写版
GROUPING SETSGROUPING SETS子句允许你指定多个GROUP BY选项 。增强了GROUP BY的功能 。
可以通过一条SELECT语句实现复杂繁琐的多条SELECT语句的查询 。并且更加的
高效,解析存储一条SQL于语句
GROUP SETS示例
我们以Customers表为例,其内容如下:
文章插图
图片
我们先分别对城市和省份进行分组,统计出他们的数量
SELECT 城市,NULL 省份,COUNT(城市) FROM CustomersGROUP BY 城市UNION ALLSELECT NULL,省份,COUNT(省份) FROM CustomersGROUP BY 省份
结果为:文章插图
图片
再使用GROUPING SETS来统计
SELECT 城市,省份,COUNT(客户ID) 数量FROM CustomersGROUP BY GROUPING SETS (城市,省份)
结果如下文章插图
图片
其实上下两个结果是一样的,只是UNION ALL不排序,而GROUPING SETS增加了排序 。这样不仅减少了代码,而且这样的效率会比UNION ALL的效率高 。通常GROUPING SETS使用在组合分析中 。
ROLLUPROLLUP也是GROUPING SETS的一种简略写法,我们举例说明 。
我们先使用GROUPING SETS的多层组合
SELECT 省份,城市,COUNT(1) 数量FROM CustomersGROUP BY GROUPING SETS (省份,(省份,城市))
其结果为:文章插图
图片
我们使用ROLLUP可以这样写
SELECT 省份,城市,COUNT(客户ID) 数量FROM CustomersGROUP BY 省份,城市 WITH ROLLUP
其结果为:文章插图
图片
我们来解读一下ROLLUP的作用,其作用是对每个列先进行一次分组,并且对第一列的数据在每个组内还进行一次汇总,最后对所有的数据再进行一次汇总,所以相比GROUPING SETS会多了个所以数据的汇总 。这个在对组内进行聚合时是经常使用到的 。
CUBE【聊聊SQL中的分组集】而CUBE相比ROLLUP就更多一个维度了,我们还是距离说明 。
SELECT 省份,城市,COUNT(客户ID) 数量FROM CustomersGROUP BY 省份,城市 WITH CUBE
结果如下:文章插图
图片
在ROLLUP的基础上,还会将第一列每组的汇总数据额外显示在最后 。
总结分组集类似于Excel的透视图,可以对各类数据进行组内计算,这里不止可以进行数量统计,也可以进行求和,最大最小值等操作 。是我们在进行数据分析时候经常使用到的一组功能 。
推荐阅读
- 上课注意力不集中的原因及解决办法
- 职场中的男性规则 男性职场法则
- 恐怖旅馆当中的老太婆是谁 恐怖旅馆女主
- 芦苇花放在家里的禁忌 芦苇花放在家中的禁忌
- 什么是裸鼠 什么是裸鼠?裸鼠在实验室中的应用有哪些?
- 宋词中好听的男孩名字 宋词中的男孩名字
- "詹姆斯的合同和姆巴佩的收入:职业体育中的巨额差距"
- 李玟丈夫宣布放弃遗产:婚姻中的真爱选择
- 奥运五环中的黄环代表什么 奥运会五环中的黄环代表什么
- 大曲和小曲的区别 酒曲中的大曲和小曲的区别