sql中 with rollup 、with cube、grouping 统计函数用法

来源:互联网 发布:dht11数据手册 编辑:程序博客网 时间:2024/05/06 05:21

with rollup 、with cube、groupingCUBE 和 ROLLUP 之间的区别在于:CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合

grouping:当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。

--例如

DECLARE@T TABLE(名称 VARCHAR(1) , 出版商VARCHAR(10), 价格1INT, 价格2INT)

INSERT@T

SELECT'a','北京',11, 22UNIONALL

SELECT'a','四川',22, 33UNIONALL

SELECT'b','四川',12, 23UNIONALL

SELECT'b','北京',10, 20UNIONALL

SELECT'b','昆明',20, 30

SELECT

名称,

出版商,SUM(价格1)AS 价格1,

SUM(价格2)AS 价格2,

GROUPING(名称)AS CHECK名称,

GROUPING(出版商)AS CHECK出版商

FROM@T

GROUPBY 名称,出版商 

WITH CUBE

/*名称 出版商 价格1 价格2 CHECK名称 CHECK出版商

---- ---------- ----------- ----------- ------- --------

a 北京 11 22 0 0

a 四川 22 33 0 0

a NULL 33 55 0 1

b 北京 10 20 0 0

b 昆明 20 30 0 0

b 四川 12 23 0 0

b NULL 42 73 0 1

NULL NULL 75 128 1 1

NULL 北京 21 42 1 0

NULL 昆明 20 30 1 0

NULL 四川 34 56 1 0

(所影响的行数为 11 行)

*/

--分析/*group by 两列:名称有两个类别A,B;所有由CUBE运算而生成行的是

名称 出版商 价格1 价格2 CHECK名称 CHECK出版商

---- ---------- ----------- ----------- ------- --------

a NULL 33 55 0 1

b NULL 42 73 0 1

出版商有三个类别,所有由CUBE运算而生成行的是

名称 出版商 价格1 价格2 CHECK名称 CHECK出版商

---- ---------- ----------- ----------- ------- --------

NULL 北京 21 42 1 0

NULL 昆明 20 30 1 0

NULL 四川 34 56 1 0

以及

NULL NULL 75 128 1 1

*/

SELECT名称,出版商,SUM(价格1)AS 价格1,SUM(价格2)AS 价格2

FROM@T 

GROUPBY 名称,出版商WITH ROLLUP

/*名称 出版商 价格1 价格2

---- ---------- ----------- -----------

a 北京 11 22

a 四川 22 33

a NULL 33 55

b 北京 10 20

b 昆明 20 30

b 四川 12 23

b NULL 42 73

NULL NULL 75 128

*/

原创粉丝点击