这两个都是分组聚合函数。
介绍:
rollup函数是针对group by之后的第一列进行分组求和,并且还会计算一个总和。
cube函数则是对于每一个column都会进行分组的一个求和,并且也会计算一个总和。
实例来看吧。
--建表
drop table #numtable
create table #numtable(
name1 varchar(20),
name2 varchar(20),
cost money null
)
go
--插入值
insert into #numtable values('A1','AA1',3)
insert into #numtable values('A1','AA2',2)
insert into #numtable values('A1','AA3',1)
insert into #numtable values('A1','AA4',0)
insert into #numtable values('A2','AA1',3)
insert into #numtable values('A2','AA2',2)
insert into #numtable values('A2','AA3',1)
insert into #numtable values('A2','AA4',0)
然后,这个表长这个样:
首先,我们看一下rollup函数。
--两种写法,结果是一样的。
--第一种
select name1,name2,SUM(cost)
from #numtable
group by rollup(name1,name2)
go
--第二种
select name1,name2,SUM(cost)
from #numtable
group by name1,name2
with rollup
go
结果显示如下:
空值null表示,在计算聚合的时候是可以忽视相关的列的。
接下来看一下cube函数。
--同样的可以两种写法
--第一种写法
select name1,name2,SUM(cost)
from #numtable
group by cube(name1,name2)
go
--第二种写法
select name1,name2,SUM(cost)
from #numtable
group by name1,name2
with cube
go
结果如下:
结果是没问题的,就是格式有点丑,这个问题不大。
over