前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL中的分组集

SQL中的分组集

作者头像
SQL数据库开发
发布2024-04-25 08:43:17
570
发布2024-04-25 08:43:17
举报
文章被收录于专栏:SQL数据库开发SQL数据库开发

分组集的定义

是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用"UNION ALL",计算多个结果集的并集。

分组集种类

SQL Server的分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP, 其中 CUBE和ROLLUP可以当做是GROUPING SETS的简写版

GROUPING SETS

GROUPING SETS子句允许你指定多个GROUP BY选项。增强了GROUP BY的功能。

可以通过一条SELECT语句实现复杂繁琐的多条SELECT语句的查询。并且更加的

高效,解析存储一条SQL于语句

GROUP SETS示例

我们以Customers表为例,其内容如下:

我们先分别对城市和省份进行分组,统计出他们的数量

代码语言:javascript
复制
SELECT 城市,NULL 省份,COUNT(城市) FROM Customers
GROUP BY 城市
UNION ALL
SELECT NULL,省份,COUNT(省份) FROM Customers
GROUP BY 省份

结果为:

再使用GROUPING SETS来统计

代码语言:javascript
复制
SELECT 
城市,
省份,
COUNT(客户ID) 数量 
FROM Customers
GROUP BY GROUPING SETS (城市,省份)

结果如下

其实上下两个结果是一样的,只是UNION ALL不排序,而GROUPING SETS增加了排序。这样不仅减少了代码,而且这样的效率会比UNION ALL的效率高。通常GROUPING SETS使用在组合分析中。

ROLLUP

ROLLUP也是GROUPING SETS的一种简略写法,我们举例说明。

我们先使用GROUPING SETS的多层组合

代码语言:javascript
复制
SELECT 
省份,
城市,
COUNT(1) 数量 
FROM Customers
GROUP BY GROUPING SETS (
省份,(省份,城市)
)

其结果为:

我们使用ROLLUP可以这样写

代码语言:javascript
复制
SELECT 
省份,
城市,
COUNT(客户ID) 数量 
FROM Customers
GROUP BY 省份,城市 WITH ROLLUP

其结果为:

我们来解读一下ROLLUP的作用,其作用是对每个列先进行一次分组,并且对第一列的数据在每个组内还进行一次汇总,最后对所有的数据再进行一次汇总,所以相比GROUPING SETS会多了个所以数据的汇总。这个在对组内进行聚合时是经常使用到的。

CUBE

而CUBE相比ROLLUP就更多一个维度了,我们还是距离说明。

代码语言:javascript
复制
SELECT 
省份,
城市,
COUNT(客户ID) 数量 
FROM Customers
GROUP BY 省份,城市 WITH CUBE

结果如下:

在ROLLUP的基础上,还会将第一列每组的汇总数据额外显示在最后。

总结

分组集类似于Excel的透视图,可以对各类数据进行组内计算,这里不止可以进行数量统计,也可以进行求和,最大最小值等操作。是我们在进行数据分析时候经常使用到的一组功能。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-27,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 SQL数据库开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分组集的定义
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com