返回首页

gbase数据、南大通用产品文档:GBase8aGROUP BY ROLLUP 函数

更新日期:2024年09月11日

语法
GROUP BY ROLLUP( (…),(…),…)
功能
对ROLLUP 后面括号里的n 个字段或表达式组合做GROUP BY 操作,最后将结果
合并在一起,组合方式为n、n-1、n-2、…、1、0。
详见下面的解释:
GROUP BY ROLLUP(A,B,C) (A、B、C 代表语法中的“(…)”)
首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)
进行GROUP BY,
然后对全表进行GROUP BY 操作,
最后将所有结果合并在一起(相
当于UNION ALL 操作),如果n 个字段或表达式中的一个或多个在某一分组中不出
现在GROUP BY 后面,用NULL 代替不出现的字段或表达式。
通常该函数用于统计例如商品的明细,小计以及最后总计的场景。
示例
示例1:GROUP BY ROLLUP(color_type,f_YearMonth)

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 576
gbase> SELECT NVL(color_type,'') as color_type_show,DECODE(NVL(color_type,''),'','总计
',NVL(f_YearMonth,color_type || ' 小计')) AS f_YearMonth_show,SUM(color_count) FROM
(SELECT color_type,DATE_FORMAT(in_date, '%Y-%m') as f_YearMonth,color_count FROM
t3) t GROUP BY ROLLUP(color_type,f_YearMonth) ORDER BY color_type,f_YearMonth;
+-----------------+------------------+------------------+
| 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

储池创建 chunk(SQL 管理 API)
随同 admin() 或 task() 函数,使用 create chunk from storagepool 参数来手工地从
存储池中的条目创建 chunk。
语法

元素
描述
关键考虑
space_name
您正在添加 chunk 到其上的存
储空间的名称。

initial_chunk_size
初始 chunk 的大小,以 KB 为
单位。
请参阅 admin() 和 task() 参
数大小规范。

用法
您还可使用带有 modify space expand 参数的 SQL 管理 API 命令来手工地从存储池创建
chunk,并将该 chunk 添加到指定的存储空间。然而,如果该空间有可扩展的 chunk,则
GBase 8s 可能扩展一 chunk 而不创建一个新的。与 modify space expand 参数不一样,
create chunk from storagepool 参数强制 GBase 8s 添加 chunk。
示例
下列命令添加 chunk 到名为 logdbs 的 dbspace。新 chunk 的大小为 200 MB。
EXECUTE FUNCTION task("create chunk from storagepool", "logdbs", "200 MB");

下列 CREATE FUNCTION 语句创建读取客户地址的例程:
CREATE FUNCTION read_address (lastname CHAR(15)) -- one argument
RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(15),CHAR(2)
CHAR(5); -- 6 items

DEFINE p_lname,p_fname, p_city CHAR(15);
--define each routine variable
DEFINE p_add CHAR(20);
DEFINE p_state CHAR(2);
DEFINE p_zip CHAR(5);

SELECT fname, address1, city, state, zipcode
INTO p_fname, p_add, p_city, p_state, p_zip
FROM customer
WHERE lname = lastname;

RETURN p_fname, lastname, p_add, p_city, p_state, p_zip;
--6 items
END FUNCTION;

DOCUMENT 'This routine takes the last name of a customer as',
--brief description
'its only argument. It returns the full name and address',
'of the customer.'

WITH LISTING IN 'pathname' -- modify this pathname according
-- to the conventions that your operating system requires

-- compile-time warnings go here
; -- end of the routine read_address