mssql rollup cube 关键字的用法


一、mssql rollup cube 关键字简介

rollup cube 关键字的功能是对sql分组数据进行求和操作;


rollup :根据group by第一列 进行汇总,采用聚合函数进行求和操作
cube: 根据group by后面的所有列,采用聚合函数进行求和操作
当group by 后面只存在一个分组列时,此时rollup 和 cube得到的结果是一致的

rollup cube:主要应用于分组计数后的聚和计算
例: 我们已经按照将客户 区域 分组计算出 本月销售额 平均额
此时我们可以直接按照 加上 with rollup 聚合求出 整个公司的 销售额 平均额



二、mssql rollup cube 关键字应用

   2.1 单列聚合
     create table A(keyId int ,info varchar(60) not null , writeDate datetime)  
go 
insert into A(keyId,info,writeDate)values(1,'maomao365.com',GETDATE())
go
insert into A(keyId,info,writeDate)values(3,'www.maomao365.com',GETDATE())
go
insert into A(keyId,info,writeDate)values(8,'http://www.maomao365.com',GETDATE())
go
insert into A(keyId,info,writeDate)values(8,'http://www.maomao365.com',GETDATE())
go

select keyId,COUNT(info),SUM(keyId) from A 
group by keyId

/*会根据keyId 获取所有列的组合聚合值 -并将其加入返回数据集中*/
select keyId,COUNT(info),SUM(keyId) from A 
group by keyId
WITH Rollup 
go
 /*会根据keyId 获取所有列的组合聚合值 -并将其加入返回数据集中*/
select keyId,COUNT(info),SUM(keyId) from A 
group by keyId  
WITH cube 
go


truncate table A
drop     table A

mssql_rollup_cube单列聚合


  2.2 双列聚合
create table A(keyId int ,info varchar(60) not null , writeDate datetime)  
go 
insert into A(keyId,info,writeDate)values(1,'maomao365.com',GETDATE())
go
insert into A(keyId,info,writeDate)values(3,'www.maomao365.com',GETDATE())
go
insert into A(keyId,info,writeDate)values(8,'http://www.maomao365.com',GETDATE())
go
insert into A(keyId,info,writeDate)values(8,'http://www.maomao365.com',GETDATE())
go
select keyId,info,COUNT(info),SUM(keyId) from A 
group by keyId,info

/*会根据keyId 获取所有列的组合聚合值 -并将其加入返回数据集中
1 keyId 全部聚合值
2 keyId=1 info 所有值的聚合值
3 keyId=3 info 所有值的聚合值
4 keyId=8 info 所有值的聚合值
所有采用  rollup 关键,group by后面会多出四行数据
*/

select keyId,COUNT(info),SUM(keyId) from A 
group by keyId,info
WITH Rollup 
go

/*会根据keyId info 获取所有列的组合聚合值 -并将其加入返回数据集中
1 keyId 全部聚合值 由于只有两列聚和  所以会和5 9  重复
2 keyId=1 info 所有值的聚合值
3 keyId=3 info 所有值的聚合值
4 keyId=8 info 所有值的聚合值
5 info 全部聚合值 由于只有两列聚和  所以会和1 9  重复
6 info="http://www.maomao365.com" info 所有值的聚合值
7 info="maomao365.com" info 所有值的聚合值
8 info="www.maomao365.com" info 所有值的聚合值
9 keyId info 全部聚合值 由于只有两列聚和  所以会和5 1  重复
所有采用  cube 关键,group by后面会多出9行数据,但是会剔除重复的两行,实际多出聚合行7行
*/

select keyId,info,COUNT(info),SUM(keyId) from A 
group by keyId,info  
WITH cube 
go

truncate table A
drop     table A

mssql_rollup_cube多列聚合

相关阅读:
如果查询MSSQL中重复列(group by having count)