为什么要引入ROLLUP?
可方便的生成"合计"、"小计"、"总计" 等混合统计的报表
如下数据集A经过ROLLUP运算可生成数据集B

接下来用上图中的A表做各种测试:
 
1.ROLLUP简单应用
SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color  WITH ROLLUP
查询结果如下:
如果用ROLLUP的另一个关键字CUBE产生的结果如下:
SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color  WITH CUBE
 
引出一个概念:
维:查询所指定的列称为维,列的个数称为维度
以上两个SQL语句涉及三个维度,ROLLUP和CUBE都可以用于多维计算,不同点在于CUBE可以包含所有纬度的组合,而
ROLLUP只涉及指定列的维度计算。
 
2.ROLLUP运算关键字GROUPING
GROUPING:判断是否为多维计算中的附加列,如果是则输出1,否则输出0
 
SELECT Groups= CASE  WHEN GROUPING(GROUPS)=1 THEN 1 ELSE 0 END ,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP
结果:
引入ROLLUP可以方便的对查询结果排序或自定义附加列的格式
 

排序应用:
SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP ORDER BY GROUPING(Groups),Groups DESC
结果:

补充:关于汉字、字母、null、空值、数字的排序问题

 
 SELECT * FROM @t ORDER BY groups DESC
结果:
至于自定义附加列的样式在第三步讲解
3.ROLLUP综合运用
SELECT Groups=CASE    
  WHEN GROUPING(Color)=0 THEN Groups   
  WHEN GROUPING(Groups)=1 THEN '总计'  
  ELSE '' END,   
 Item=CASE    
  WHEN GROUPING(Color)=0 THEN Item   
  WHEN GROUPING(Item)=1 THEN Groups+' 合计'  
  ELSE '' END,   
 Color=CASE    
  WHEN GROUPING(Color)=0 THEN Color   
  WHEN GROUPING(Color)=1 THEN Item+' 小计'  
  ELSE '' END,   
 Quantity=SUM(Quantity)   
FROM @t   
GROUP BY Groups,Item,Color WITH ROLLUP  
ORDER BY GROUPING(Groups),   
CASE WHEN GROUPING(Groups)=0 THEN Groups END  DESC,   
GROUPING(Item),   
CASE WHEN GROUPING(Item)=0 THEN Item END  DESC,   
GROUPING(Color),   
CASE WHEN GROUPING(Color)=0 THEN Color END  DESC
结果:
--------------------------------------------------------------------------------------------------------------------------------------
Cube 和 RollUp 的区别
The differences between CUBE and ROLLUP are:
  • CUBE generates a result set that shows aggregates for all combinations of values in the selected columns.

  • ROLLUP generates a result set that shows aggregates for a hierarchy of values in the selected columns.

可以看到Cube 比 RollUp多了三行.一比较发现,多的三行都是以Color列为纬度统计的。再结合书上说的那点区别,说RollUp是按层统计的。
猜想区别就是Cube对每个纬度都统计了,而RollUp对Group by 后跟的第一个纬度按照值不同顺序统计完后,终止在Null,NUll,1117这一行,不再继续。
我又加了一列Dept,调整之后再次比较结果,证实了我的猜想,RollUp以Item作为基本纬度,统计完所有情况后,就终止在Null,Null,NUll,1117这一行了。

下面附上sql语句:
CREATE TABLE Inventory (
Item varchar(53) NOT NULL,
Color varchar(53) NULL,
Department varchar(53) Null,
Quantity int NULL
);

INSERT Inventory VALUES ('Table', 'Red','IT', 223);
INSERT Inventory VALUES ('Table', 'White','HR', 54);
INSERT Inventory VALUES ('Table', 'Blue','ADM', 124);
INSERT Inventory VALUES ('Chair', 'Red', 'IT',210);
INSERT Inventory VALUES ('Chair', 'Blue','HR', 101);
INSERT Inventory VALUES ('Chair', 'White','ADM', 23);
INSERT Inventory VALUES ('Stand', 'Red','IT', 213);
INSERT Inventory VALUES ('Stand', 'Blue','HR', 141);
INSERT Inventory VALUES ('Stand', 'White','ADM', 28);

SELECT * FROM Inventory

SELECT Item, Color, Department,SUM(Quantity) AS Quantity
FROM Inventory
GROUP BY Item, Color,Department WITH CUBE;

SELECT Item, Color, Department,SUM(Quantity) AS Quantity
FROM Inventory
GROUP BY Item, Color,Department WITH Rollup

转载于:https://www.cnblogs.com/streetpasser/archive/2012/07/08/2581465.html

SQL系列ROLLUP关键字相关推荐

  1. oracle批量更新数据从另一表_常用SQL系列之(五):多表和禁止插入、批量与特殊更新等...

    本系统为@牛旦教育IT课堂在微头条上的内容, 为便于查阅,特辑录于此,都是常用SQL基本用法.. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...

  2. Oracle rollup 关键字用法简介.

    1. 什么是Rollup 在PL/sql 中,  Rollup 这个关键字通常用于select 语句的 group by 后面. 在group by 后面使用rollup关键字,  select语句就 ...

  3. SQLSERVER中的ALL、PERCENT、CUBE关键字、ROLLUP关键字和GROUPING函数

    SQLSERVER中的ALL.PERCENT.CUBE关键字.ROLLUP关键字和GROUPING函数 先来创建一个测试表 1 USE [tempdb] 2 GO 3 4 CREATE TABLE # ...

  4. mongoose 批量修改字段_常用SQL系列之(五):多表和禁止插入、批量与特殊更新等...

    本系统为@牛旦教育IT课堂在微头条上的内容, 为便于查阅,特辑录于此,都是常用SQL基本用法.. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...

  5. 读《深入浅出MySQL数据库开发、优化与管理维护(第2版)》笔记2 WITH ROLLUP关键字

    读<深入浅出MySQL数据库开发.优化与管理维护(第2版)>笔记2 WITH ROLLUP关键字 WITH ROLLUP是可选语法,表名是否对分类聚合后的结果进行再汇总; 我自己的使用实例 ...

  6. SQL系列(三)SQL使用的旁枝末节

    SQL系列(三)SQL使用的旁枝末节 首先,来揭晓上期的答案.方法不唯一,符合结果即可- -- 常规方法 with temp as (select 2 as st,5 as enunion allse ...

  7. SQL LEFT JOIN 关键字

    SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行. LEFT JOIN 关键 ...

  8. db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...

    本系统为@牛旦教育IT课堂在微头条上发布的内容,为便于查阅,特辑录于此,都是常用SQL基本用法. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...

  9. MySQL查询语种关键字_SQL——SQL语言全部关键字详解

    http://blog.csdn.net/quinnnorris/article/details/71056445 数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就 ...

最新文章

  1. 程序员级别鉴定书(.NET面试问答集锦)
  2. 函数形参传递概念及问题分析
  3. 平衡二叉树(AVL树)-详解平衡调整
  4. 使用Spring跟踪异常–第2部分–委托模式
  5. toj 4606 Homework Checker
  6. 图像编码中的小白问题sps ,pps ,nalu ,frame ,silce ect....
  7. vue 组件 全局组件和局部组件component
  8. javamail 解码 base64 html格式邮件_关于JavaMail,我遇上的那些史前巨坑...(建议收藏)
  9. 文件操作:fseek函数和ftell函数
  10. 淘宝订单API接口参数详解
  11. 单例模式有几种写法?
  12. 史上最全的开源库整理
  13. 【海外合作】效率源智能手机取证系统入选克罗地亚大学教学工具
  14. 机器学习之决策树实践:隐形眼镜类型预测
  15. CSS - 制作三角形
  16. html5微信语音转文字,文字转换语音软件:我有个朋友不会识字 怎么能把微信上别人发给他的文字转换成语音...
  17. CT图像分割dicom文件与nii.gz文件预处理----窗宽(window width)和窗位(window level)的设置
  18. 邮箱注册,登录及激活
  19. 拉姆.查兰《执行》笔记
  20. UE5+VS2022编译Lyra实例项目

热门文章

  1. freemind的一个大bug,一周的数据啊
  2. zabbix_server的自动发现,实现批量添加主机,并链接到模板
  3. SQL SERVER 查看并结束某个进程
  4. mysql5.5与5.5版本关于修改字符集的方法
  5. windows下检测网站是否正常运行并自动重启服务
  6. 关于Debug和Release编译方式
  7. 第九章 性能监控诊断
  8. 九爷带你了解 nginx 日志配置指令详解
  9. HTML标签大全(三)
  10. Placement new