GROUPING SETS、CUBE、ROLLUP
其实还是写一个Demo 比较好
USE tempdb
IF OBJECT_ID( 'dbo.T1' , 'U'
)IS NOT NULL
BEGIN
DROP TABLE dbo.T1;
END;
GO CREATE TABLE dbo.T1
(
id INT ,
productName VARCHAR(200) ,
price MONEY ,
num INT ,
amount INT ,
operatedate DATETIME
)
GO DECLARE @i INT
DECLARE @rand MONEY
DECLARE @date DATETIME
DECLARE @index INT
DECLARE @DateBase INT
SET @date = GETDATE()
SET @i = 1
WHILE ( @i < 15 )
BEGIN
SET @rand = RAND() * 20
SET @index = CAST(RAND() * 3 AS INT)
SET @DateBase = CAST(RAND() * 10 AS INT) INSERT INTO dbo.T1 ( id, productName, price, num, amount, operatedate )
VALUES ( @i, 'product' + CAST (@index AS VARCHAR(10)), @rand, 100,@rand * 100, @date + @DateBase )
SET @i = @i + 1
END SELECT * FROM dbo.T1
order by operatedate

结果集差不多是这样样子,按照时间排序。
跑一句关于ROLLUP和一句CUBE
--ROLLUP
SELECT CASE WHEN GROUPING(operatedate) = 1 THEN '小计'
ELSE CONVERT(VARCHAR(10), operatedate, 120)
END AS 日期, CASE WHEN GROUPING(productName) = 1 THEN '小计'
ELSE productName
END AS 产品名称, SUM(amount) / SUM(num) AS 平均价格, SUM(num) AS 数量,
SUM(amount) AS 金额
FROM dbo.T1
GROUP BY ROLLUP(operatedate, productName)
ORDER BY '日期','产品名称'; --CUBE
SELECT CASE WHEN GROUPING(operatedate) = 1 THEN '小计'
ELSE CONVERT(VARCHAR(10), operatedate, 120)
END AS 日期, CASE WHEN GROUPING(productName) = 1 THEN '小计'
ELSE productName
END AS 产品名称, SUM(amount) / SUM(num) AS 平均价格, SUM(num) AS 数量,
SUM(amount) AS 金额
FROM dbo.T1
GROUP BY CUBE (operatedate, productName)
ORDER BY '日期','产品名称';
为了方便显示是,都按照'日期','产品名称' 进行了排序。贴入Excel 里方便查看结果

可以看到CUB 会多产生关于产品名称的合计。
不要使用以下的两个子句,请替换成GROUP BY CUBE ( );GROUP BY ROLLUP ( );
WITH CUBE
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。指定结果集内不仅包含由 GROUP BY 提供的行,同时还包含汇总行。 GROUP BY 汇总行针对每个可能的组和子组组合在结果集内返回。 使用 GROUPING 函数可确定结果集内的空值是否为 GROUP BY 汇总值。
结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。 由于 CUBE 返回每个可能的组和子组组合,因此不论在列分组时指定使用什么顺序,行数都相同。
WITH ROLLUP
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。指定结果集内不仅包含由 GROUP BY 提供的行,同时还包含汇总行。 按层次结构顺序,从组内的最低级别到最高级别汇总组。 组的层次结构取决于列分组时指定使用的顺序。 更改列分组的顺序会影响在结果集内生成的行数。
关于GROUPING SETS 可以参看CareySon 所写的Blog
GROUPING SETS、CUBE、ROLLUP的更多相关文章
- Oracle的rollup、cube、grouping sets函数
转载自:https://blog.csdn.net/huang_xw/article/details/6402396 Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollu ...
- Hive学习之路 (十七)Hive分析窗口函数(五) GROUPING SETS、GROUPING__ID、CUBE和ROLLUP
概述 GROUPING SETS,GROUPING__ID,CUBE,ROLLUP 这几个分析函数通常用于OLAP中,不能累加,而且需要根据不同维度上钻和下钻的指标统计,比如,分小时.天.月的UV数. ...
- Oracle中group by 的扩展函数rollup、cube、grouping sets
Oracle的group by除了基本使用方法以外,还有3种扩展使用方法,各自是rollup.cube.grouping sets.分别介绍例如以下: 1.rollup 对数据库表emp.如果当中两个 ...
- Group by后加rollup、cube、Grouping_Sets的用法区别
一.相关分析 通常当聚合率和数据量没有大于一定程度时,对于不涉及Rollup.Cube.Grouping_Sets这三种操作的聚合很少出现GC问题.对于Rollup.Cube.Grouping_Set ...
- 解析数仓OLAP函数:ROLLUP、CUBE、GROUPING SETS
摘要:GaussDB(DWS) ROLLUP,CUBE,GROUPING SETS等OLAP函数的原理解析. 本文分享自华为云社区<GaussDB(DWS) OLAP函数浅析>,作者: D ...
- Hive高阶聚合函数 GROUPING SETS、Cube、Rollup
-- GROUPING SETS作为GROUP BY的子句,允许开发人员在GROUP BY语句后面指定多个统计选项,可以简单理解为多条group by语句通过union all把查询结果聚合起来结合起 ...
- Hive函数:GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
参考:lxw大数据田地:http://lxw1234.com/archives/2015/04/193.htm 数据准备: CREATE EXTERNAL TABLE test_data ( mont ...
- ROLLUP、CUBE、GROUP BY的使用区别
1.ROLLUP:根据维度在数据结果集中进行的聚合操作,可多维度SELECT count(*) num,MONTH(register_time) times,`status` FROM `user` ...
- sql中 with rollup 、with cube、grouping 统计函数用法
with rollup .with cube.grouping CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合. ROLLUP 生成的结果集显示了 ...
随机推荐
- Objective-C的内存管理
一.Objective-C内存管理的对象 1. 值类型:比如int.float.struct等基本数据类型. 值类型会被放入栈中,在内存中占有一块连续的内存空间,遵循先进后出的原则,故不会产生碎片. ...
- 这些优化 Drupal 网站速度的超简单办法,你忽略了多少?
“怎么样能让我的 Drupal 网站更快一些?”是我们最常遇到的一个问题.站点速度确实非常重要,因为它会影响你的 SEO排名效果.访客是否停留以及你自己管理网站所需要的时间. 今天我们就来看看那些通过 ...
- Github 恶搞教程(一起『玩坏』自己的 Github 吧)
最近在伯乐在线读到一篇趣文,<如何在 Github『正确』做贡献>,里面各种能人恶搞 Github 的『Public contributions』,下面截取几个小伙伴的战绩: 顺藤摸瓜,发 ...
- ICE学习——异步1
ICE的AMI和AMD: AMI:指的是客户端的调用.一般有一个代理类,一个回调类. 从服务端返回的数据在回调类中的ice_response函数中. AMD:指的是服务端对客户端的调用分派.一般进行业 ...
- CSS实用的代码段
摘抄的一些代码还有自己总结的常用的代码~ 1>浏览器样式统一 *{ margin:0px; padding:0px; } 浏览器样式统一 2>清除浮动的方法 3>跨浏览器设置透明度 ...
- 开源项目:DolphinPlayer
Dolphin Player是一款基于FFmpeg解码视频播放器,支持大多数的音频和视频格式. 项目主页:http://code.google.com/p/dolphin-player/ 源代码Git ...
- ios delegate 代理模式 观察者模式 不同视图间的通信
delegate,在ios中比比皆是,NSURLConnection(网络请求有),tableView, connectionView,等系统自带 的常见代理.甚至,自己写代码的时候,随意间敲打出了p ...
- $watch 和 $apply
1.当你使用 ng-model, ng-repeat 等等来绑定一个元素的值时, AngularJS 为那个值创建了一个 $watch,只要这个值在 AngularJS 的范围内有任何改变,所有的地方 ...
- css3为图片添加鼠标移入放大效果
只需要为添加效果的图片定义一个伪类 img.zoom-img:hover { -webkit-transform: scale(1.15); -webkit-transition-timing-fun ...
- WireShark 过滤语法
1. 过滤IP,如来源IP或者目标IP等于某个IP 例子: ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107 或者 ip.addr eq 192.1 ...