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 生成的结果集显示了 ...
随机推荐
- Lambda表达式有何用处?如何使用?
简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数.这一用法跟所谓 λ 演算(题目说明里的维基链接)的关系,有点像原子弹和质 ...
- mybatis-generator 代码自动生成工具
今天来介绍下怎么用mybatis-gennerator插件自动生成mybatis所需要的dao.bean.mapper xml文件,这样我们可以节省一部分精力,把精力放在业务逻辑上. 之前看过很多文章 ...
- 使用UI Automation实现自动化测试 --微软提供的控件Pattern
微软提供的控件Pattern System.Windows.Automation 命名空间 System.Windows.Automation.BasePattern 为控件模式类提供基实现 Syst ...
- pxecfg&kickstart生成脚本
em tm 00:00:00:00:00:12 10.180.1.12 255.255.255.0 173.45.34.25 255.255.255.225 173.45.34.1 em tm 00: ...
- vba 快速定位当前EXCEL最后一栏
工作的需要,有时会对EXCEL数据进行处理,比如格式化,有数据的单元格画横线. 最初,傻傻的,直接用个循环从第1行,一直往后找,判断是否为空,真傻. Function FindLastCell() D ...
- Flexbox布局详解
弹性框布局 (flexbox) 添加了级联样式表级别 2 修订版 1 (CSS2.1) 中定义的四个基本布局模式:块布局.内联布局.表格布局和定位布局.使用弹性框布局功能,你可以更加轻松地设计复杂网页 ...
- css3mediaquery移动端网页字体适应屏幕代码
@media screen and (min-width:320px) and (max-width:321px) { html { font-size: 62.5%; } } @media scre ...
- HTML 表单总结http://images2015.cnblogs.com/blog/1001203/201607/1001203-20160730200559841-2144892373.png
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- POJ C++程序设计 编程题#2 编程作业—文件操作与模板
编程题#2: 实数的输出格式 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 ...
- CentOS6.X安装vsftpd服务
#-----------------CentOS6.X安装VSFTPD服务 #! /bin/sh #1.关闭selinux setenforce 0 sed -i 's/enforcing/disab ...