返回首页

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

更新日期:2024年09月11日

check table BackUp success

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-04-10)
南大通用数据技术股份有限公司
887
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-04-10)
南大通用数据技术股份有限公司
888
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

gbase_fetch_field_direct
......................
14