返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

GROUP BY ROLLUP 函数
语法
GROUP BY ROLLUP( (…),(…),…)
功能
对ROLLUP 后面括号里的n 个字段或表达式组合做GROUP BY 操作,最后将结
果合并在一起,组合方式为n、n-1、n-2、…、1、0。
详细解释
GROUP BY ROLLUP(A,B,C) (A、B、C 代表语法中的“(…)”)
1.
首先会对(A、B、C)进行GROUP BY;
2.
然后对(A、B)进行GROUP BY;
3.
然后是(A)进行GROUP BY;
4.
最后对全表进行GROUP BY 操作,即包含未出现在GROUP BY ROLLUP 函数
中的字段或表达式进行group by 操作,不出现的字段或表达式用NULL
代替
5.
最终将所有结果合并在一起(相当于UNION ALL 操作),如果n 个字段或表
达式中的一个或多个在某一分组中不出现在GROUP BY 后面,用NULL 代
替不出现的字段或表达式。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
882
create database if not exists db1;
drop table if exists t1;
create table t1 (a int,b int,c int);
insert into t1 values (1,3,5),(2,4,6);
gbase> select * from t1 group by rollup(a,b,c);
+------+------+------+
| a
| b
| c
|
+------+------+------+
|
1 |
3 |
5 |①
|
2 |
4 |
6 |①
|
1 |
3 | NULL |②
|
2 |
4 | NULL |②
|
1 | NULL | NULL |③
|
2 | NULL | NULL |③
| NULL | NULL | NULL |④
+------+------+------+
7 rows in set (Elapsed: 00:00:00.08)
gbase> select *,sum(a),max(b),min(c) from t1 group by rollup(a,b,c);
+------+------+------+--------+--------+--------+
| a
| b
| c
| sum(a) | max(b) | min(c) |
+------+------+------+--------+--------+--------+
|
2 |
4 |
6 |
2 |
4 |
6 |①
|
1 |
3 |
5 |
1 |
3 |
5 |①
|
2 |
4 | NULL |
2 |
4 |
6 |②
|
1 |
3 | NULL |
1 |
3 |
5 |②
|
2 | NULL | NULL |
2 |
4 |
6 |③
|
1 | NULL | NULL |
1 |
3 |
5 |③
| NULL | NULL | NULL |
3 |
4 |
5 |④
+------+------+------+--------+--------+--------+
7 rows in set (Elapsed: 00:00:00.09)
通常该函数用于统计例如商品的明细,小计以及最后总计的场景。
示例
示例中所用的表及数据:
DROP TABLE IF EXISTS t3;
CREATE TABLE t3 (color_type varchar(20),color_count int, in_date date);
INSERT INTO t3 (color_type,in_date,color_count)
VALUES('black','2010-09-11',18),
('black','2010-10-05',18),('black','2010-10-13',31),
('blue','2010-09-21',23),('blue','2010-09-30',15),
('blue','2010-10-11',62),('red','2010-09-12',41),
('red','2010-10-01',12),('red','2010-10-05',11);
示例1:GROUP BY ROLLUP(color_type,f_YearMonth)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
883
gbase> SELECT NVL(color_type,'') as color_type_show,DECODE(NVL(co
lor_type,''),'','总计',NVL(f_YearMonth,color_type || ' 小计')) AS f_YearMo
nth_show,SUM(color_count) FROM (SELECT color_type,DATE_FORMAT
(in_date, '%Y-%m') as f_YearMonth,color_count FROM t3) t GROUP B
Y ROLLUP(color_type,f_YearMonth) ORDER BY color_type,f_YearMont
h;
+-----------------+------------------+------------------+
| color_type_show | f_YearMonth_show | SUM(color_count) |
+-----------------+------------------+------------------+
| black
| 2010-09
|
18 |
| black
| 2010-10
|
49 |
| black
| black 小计
|
67 |
| blue
| 2010-09
|
38 |
| blue
| 2010-10
|
62 |
| blue
| blue 小计
|
100 |
| red
| 2010-09
|
41 |
| red
| 2010-10
|
23 |
| red
| red 小计
|
64 |
|
| 总计
|
231 |
+-----------------+------------------+------------------+
10 rows in set

|
3 | one2
| 2013-03-03 |

用 CREATE DATABASE 语句创建数据库的用户为该数据库设立日志记录状态或缓冲方
式。有关 CREATE DATABASE 语句的更多信息,请参阅《GBase 8s SQL 指南:语法》。

如果 CREATE DATABASE 语句不指定日志记录状态,那么创建无日志记录的数据库。
只有数据库服务器管理员可以更改日志记录状态。
管理数据库日志记录方式描述了该主题。
普通用户不能更改数据库日志记录状态。
如果数据库不使用日志记录,那么无需考虑是已缓冲还是未缓冲日志记录更为适当。如果
您为数据库指定了日志记录但没有为其指定缓冲方式,那么缺省为未缓冲日志记录。
用户可以在会话期间从未缓冲日志记录切换到已缓冲(但不符合 ANSI 标准)日志记录,
也可以从已缓冲日志记录切换到未缓冲日志记录。应用程序中的 SET LOG 语句将执行该
切换。有关 SET LOG 语句的更多信息,请参阅《GBase 8s SQL 指南:语法》。