当前位置: 首页 > 科技观察

浅谈SQL中的分组集合

时间:2023-03-17 11:03:24 科技观察

本文转载自微信公众号《SQL数据库开发》,作者,平凡的世界。转载本文请联系SQL数据库开发公众号。分组集的定义是多个组的并集,用于在一次查询中根据不同的分组列对集合进行聚合,相当于对单个组使用“UNIONALL”来计算多个结果集的并集.分组集的种类SQLServer中分组集分为三种:GROUPINGSETS、CUBE和ROLLUP,其中CUBE和ROLLUP可以看作是GROUPINGSETS的简写形式。GROUPINGSETSGROUPINGSETS子句允许您指定多个GROUPBY选项。增强的GROUPBY功能。复杂繁琐的多条SELECT查询可以通过一条SELECT语句实现。而更高效的,在语句GROUPSETS中分析存储一条SQLExample我们以Customers表为例,内容如下:我们先将城市和省份分别分组,统计它们的个数SELECTcity,NULLprovince,COUNT(city)FROMCustomersGROUPBYcityUNIONALLSELECTNULL,province,COUNT(省)FROMCustomersGROUPBYprovince结果为:然后用GROUPINGSETS统计SELECT城市,省,COUNT(客户ID)FROMCustomersGROUPBYGROUPINGSETS(城市,省)结果如下In其实上下的结果是一样的,只是UNIONALL不排序,而GROUPINGSETS增加了排序。这样不仅减少了代码,而且效率也比UNIONALL高。GROUPINGSETS通常用于组合分析。ROLLUPROLLUP也是GROUPINGSETS的缩写,下面举例说明。我们先用GROUPINGSETS的多层组合SELECTprovinces,cities,COUNT(1)quantityFROMCustomersGROUPBYGROUPINGSETS(province,(province,city))结果是:我们可以用ROLLUP写SELECTprovinces,city,COUNT(customerID)quantityFROMCustomersGROUPBYprovince,cityWITHROLLUP结果是:下面来解释一下ROLLUP的作用,就是先对每一列进行分组,每组对第一列的数据汇总一次,最后对所有的数据进行汇总再次,所以会有比GROUPINGSETS更多的数据汇总。这通常在组内聚合时使用。CUBE和CUBE比ROLLUP多了一维,我们还是解释一下距离。SELECTprovinces,cities,COUNT(customerID)quantityFROMCustomersGROUPBYprovinces,citiesWITHCUBE结果如下:在ROLLUP的基础上,最后会额外显示第一列各组的汇总数据。总结分组集类似于Excel的透视图,可以对各类数据进行组内计算。这里不仅可以进行定量统计,还可以进行求和、最大值、最小值等操作。它是我们在进行数据分析时经常使用的一组函数。