GROUP BY
      GROUPING SETS()

后面将还会写学习 with cube,  with rollup,以及将它们转换为标准的GROUP BY的子句GROUP SET(), CUBE的用法(虽然MSSQL以后将会去掉)

这里面的大小写混淆来写不规范,以后还是习惯使用大写吧,有时是为节省宽度空间用小写,标准还是用大写SQL的关键字

--group by 子句中的cube,  rollup,
--这样理解: cube立方(既然是立方,就是变多了), rollup卷起,包起来(按字面意思理解) if object_id('dbo.orders','U') is not null drop table dbo.orders;
GO
CREATE TABLE dbo.Orders
(
orderid INT NOT NULL,
orderdate DATE NOT NULL,
empid INT NOT NULL,
custid VARCHAR(5) NOT NULL,
qty INT NOT NULL,
CONSTRAINT PK_Orders PRIMARY KEY(orderid)
);
GO
INSERT INTO dbo.Orders(orderid, orderdate, empid, custid, qty)
VALUES
(30001, '', 3, 'A', 10),
(10001, '', 2, 'A', 12),
(10005, '', 1, 'B', 20),
(40001, '', 2, 'A', 40),
(10006, '', 1, 'C', 14),
(20001, '', 2, 'B', 12),
(40005, '', 3, 'A', 10),
(20002, '', 1, 'C', 20),
(30003, '', 2, 'B', 15),
(30004, '', 3, 'C', 22),
--------------------------------------------------------------------------------
--下面单个SELECT...是可以查询的,用Union联合是不可以的 , 回顾一下 union all的用法
--使用union需要3个条件: 1. 字段列数、字段列序相同 2.类型兼容 3.查询结果集中的字段名称以第1个查询结果集中的字段名称为名
select empid, sum(qty) as SumQty
from Orders
group by empid union ---下面3处union,并不准备联合,放此处,只是为再熟悉 select custid, sum(qty) as SumQty
from Orders
group by custid union select empid,custid,sum(qty) as SumQty
from Orders
group by empid,custid union select sum(qty) as SumQty
from Orders --select * from Orders
--------------------------------------------------------------------------------
--Union All 集合运行要求所有的结果集包含相同的列数,所以补充了空列(null占位)
select empid, null, sum(qty) as SumQty --select empid as empidA, null, sum(qty) as SumQty , 联合起来后的结果集将显示empidA
from Orders
group by empid union all select null, custid, sum(qty) as SumQty
from Orders
group by custid union all select empid,custid,sum(qty) as SumQty --select empid as empidB, null, sum(qty) as SumQty,即使有empidB,也会显示为empidA
from Orders
group by empid,custid union all select null, null, sum(qty) as SumQty
from Orders
--------------------------------------------------------------------------------
...... union去重, union all 不去重,以后再补充此处
--------------------------------------------------------------------------------
--上面几个Union All连接起来,结果集等价于下面的
select empid,custid,sum(qty) as SumQty
from Orders
group by ------------------------------------此处group by 的子句 grouping sets
Grouping sets
(
(empid,custid),
(empid),
(custid),
()
);
--------------------------------------------------------------------------------
-- 上面的写法,等价于: 在group by 子句中加上 cube(empid,custid),它代表了这2种情况的任意组合,标准SQL)
-- cube(a,b) <=== >包括 GROUPING SETS((a,b),(a),(b),() )
select empid,custid,sum(qty) as SumQty
from Orders
group by cube(empid,custid) ------------------------------------此处group by 的子句 cube
--------------------------------------------------------------------------------
--旧式的写法,只是有group by ... 分组,但不是作为 group by 的子句,非标准的SQL写法(以后MSSQL会去掉这种写法)
select empid,custid,sum(qty) as SumQty
from Orders
group by empid,custid
with cube
--------------------------------------------------------------------------------
--ROLLUP,与CUBE对应(认为生成所有可能的结果集),而ROLLUP(只生成单个的结果集),认为成员之间有a>b>c的层次关系
--如grouping sets((a,b,c), (a), (b), ()) <===>rollup((a), (b), (c))
select
year(orderdate) as OrderYear,
month(orderdate) as OrderMonty,
day(orderdate) as OrderDay,
sum(qty) as SumQty
from Orders
group by rollup(year(orderdate),month(orderdate),day(orderdate)) /* 参考:《SQL Server 2008宝典_第2版_刘智勇_刘径舟_编著》,有实体书,讲解还是没有老外的书细致,老外的书会有个来龙去脉
《Microsoft SQL Server 2008技术内幕 T-SQL语言基础》
《Microsoft SQL Server 2012 T-SQL Fundamentals》 */
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------

group by <grouping sets(...) ><cube(...)>的更多相关文章

  1. Grouping Sets:CUBE和ROLLUP从句

    在上一篇文章里我讨论了SQL Server里Grouping Sets的功能.从文中的例子可以看到,通过简单定义需要的分组集是很容易进行各自分组.但如果像从所给的列集里想要有所有可能的分布——即所谓的 ...

  2. SQL Server ->> GROUPING SETS, CUBE, ROLLUP, GROUPING, GROUPING_ID

    在我们制作报表的时候常常需要分组聚合.多组聚合和总合.如果通过另外的T-SQL语句来聚合难免性能太差.如果通过报表工具的聚合功能虽说比使用额外的T-SQL语句性能上要好很多,不过不够干脆,还是需要先生 ...

  3. Group By Grouping Sets

    Group by分组函数的自定义,与group by配合使用可更加灵活的对结果集进行分组,Grouping sets会对各个层级进行汇总,然后将各个层级的汇总值union all在一起,但却比单纯的g ...

  4. Oracle PL/SQL之GROUP BY GROUPING SETS

    [转自] http://blog.csdn.net/t0nsha/article/details/6538838 使用GROUP BY GROUPING SETS相当于把需要GROUP的集合用UNIO ...

  5. GROUP BY GROUPING SETS 示例

    --建表 create table TEst1 ( ID ), co_CODE ), T_NAME ), Money INTEGER, P_code ) ); --插入基础数据 insert into ...

  6. grouping sets,cube,rollup,grouping__id,group by

    例1: hive -e" select type ,status ,count(1) from usr_info where pt='2015-09-14' group by type,st ...

  7. SQL GROUP BY GROUPING SETS,ROLLUP,CUBE(需求举例)

    实现按照不同级别分组统计 关于GROUP BY 中的GROUPING SETS,ROLLUP,CUBE 从需求的角度理解会更加容易些. 需求举例: 假如一所学校只有两个系, 每个系有两个专业, 每个专 ...

  8. (4.6)sql2008中的group by grouping sets

    最近遇到一个情况,需要在内网系统中出一个统计报表.需要根据不同条件使用多个group by语句.需要将所有聚合的数据进行UNION操作来完成不同维度的统计查看. 直到发现在SQL SERVER 200 ...

  9. SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

    1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...

随机推荐

  1. poj3680 最大权不相交路径

    Intervals Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8587   Accepted: 3662 Descrip ...

  2. pyenv,轻松切换各种python版本

    pyenv,轻松切换各种python版本 解决什么问题 mac自带python2,md又不能删掉他 linux也自带python2,这玩意都过时了,也不赶紧换掉 安装pyenv git 安装 git ...

  3. 记一次 React Native 大版本升级过程——从0.40到0.59

    去年把公司几个react native 相关的项目升级了下,已经过去一段时间了,这里系统整理下之前的整个过程. 背景 之前到公司的时候发现公司用的还是0.40的版本,据了解,当时项目做的比较早,导航用 ...

  4. 织梦系统dedecms实现列表页双样式,列表样式循环交替变化

    有时候做列表页需要交替变换样式,那如何实现列表页双样式呢? 在DeDeCMS里面有这样一个函数,可以循环赋予html代码不同的样式,如下: [field:global function=MagicVa ...

  5. 把数据写入txt中 open函数中 a与w的区别

    a: 打开一个文件用于追加.如果该文件已存在,文件指针将会放在文件的结尾. 也就是说,新的内容将会被写入到已有内容之后.如果该文件不存在,创建新文件进行写入. w:  打开一个文件只用于写入.如果该文 ...

  6. el-select检索功能

    使用element-UI框架的使用,我们经常使用el-select下拉框,很多时候还需要使用可搜索的下拉框,然后elementUI官网的实例中只是提了一下filter-method可以自定义搜索方法, ...

  7. Dockerfile+Jenkinsfile+GitLab轻松实现.NetCore程序的CI&CD

    一.相关介绍 Dockerfile:关于Dockerfile的使用说明,我在文章<让.NetCore程序跑在任何有docker的地方>中有说到,这里不在赘述,需要的可以先看下,本文主要介绍 ...

  8. VS中自定义代码片段

    VS - 工具 - 代码片段管理器 实现:propnotify 加 Tab 键 生成属性定义代码片段 (包含一个字段定义,一个属性get/set定义,其中set会触发属性值变更事件) <?xml ...

  9. Unity 游戏框架搭建 2019 (五十、五十一) 消息机制小结&MonoBehaviourSimplify 是框架?

    我们花了 5 篇文章学习了消息机制的方方面面.并且完成了一个简易消息机制,之后集成到了我们的 MonoBehaviourSimplify 里. 现在 MonoBehaviourSimplify 有一点 ...

  10. 前端练手小项目——网页版qq音乐仿写

    qq音乐网页版仿写 一些步骤与注意事项 一开始肯定就是html+css布局和页面了,这段特别耗时间,耐心写完就好了 首先要说一下大致流程: 一定要先布局html!,所以一定要先分析页面布局情况,用不同 ...