当前位置:Gxlcms >
mysql >
SQLwithrollup、withcube、grouping统计函数用法
SQLwithrollup、withcube、grouping统计函数用法
时间:2021-07-01 10:21:17
帮助过:7人阅读
with rollup 、 with cube、 grouping CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。 ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 grouping : 当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值
with
rollup 、
with
cube、
grouping
CUBE 和 ROLLUP 之间的区别在于:
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
grouping
:
当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。
--
例如
DECLARE
@T
TABLE
(名称
VARCHAR
(
1
) , 出版商
VARCHAR
(
10
), 价格1
INT
, 价格2
INT
)
INSERT
@T
SELECT
'
a
'
,
'
北京
'
,
11
,
22
UNION
ALL
SELECT
'
a
'
,
'
四川
'
,
22
,
33
UNION
ALL
SELECT
'
b
'
,
'
四川
'
,
12
,
23
UNION
ALL
SELECT
'
b
'
,
'
北京
'
,
10
,
20
UNION
ALL
SELECT
'
b
'
,
'
昆明
'
,
20
,
30
SELECT
名称,
出版商,
SUM
(价格1)
AS
价格1,
SUM
(价格2)
AS
价格2,
GROUPING
(名称)
AS
CHECK名称,
GROUPING
(出版商)
AS
CHECK出版商
FROM
@T
GROUP
BY
名称,出版商
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
GROUP
BY
名称,出版商
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
*/
<无>
- DECLARE @T TABLE(名称 VARCHAR(1) , 出版商 VARCHAR(10), 价格1 INT, 价格2 INT)
- INSERT @T
- SELECT 'a', '北京', 11, 22 UNION ALL
- SELECT 'a', '四川', 22, 33 UNION ALL
- SELECT 'b', '四川', 12, 23 UNION ALL
- SELECT 'b', '北京', 10, 20 UNION ALL
- SELECT 'b', '昆明', 20, 30
- SELECT
- 名称,
- 出版商,
- SUM(价格1) AS 价格1,
- SUM(价格2) AS 价格2,
- GROUPING(名称) AS CHECK名称,
- GROUPING(出版商) AS CHECK出版商
- FROM @T GROUP BY 名称,出版商 WITH CUBE
- SELECT
- 名称,
- 出版商,
- SUM(价格1) AS 价格1,
- SUM(价格2) AS 价格2
- FROM @T GROUP BY 名称,出版商 WITH ROLLUP