返回首页

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

更新日期:2024年09月11日

GROUP BY CUBE 函数
语法
GROUP BY CUBE( (…),(…),…)
功能
对CUBE 后面括号里的n 个字段或表达式组合做GROUP BY 操作,最后将结果
合并在一起,组合方式为n 个字段或表达式的全部子集。
详细解释
GROUP BY CUBE(A,B,C) (A、B、C 代表语法中的“(…)”)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
885
首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、
C),
(B),
(C),
然后对全表进行GROUP BY 操作,
最后将所有结果合并在一起
(相
当于UNION ALL 操作),如果n 个字段或表达式中的一个或多个在某一分组中
不出现在GROUP BY 后面,用NULL 代替不出现的字段或表达式。
示例
示例中所用的表及数据:
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 CUBE(color_type,f_YearMonth)
gbase> SELECT color_type,in_date,color_count FROM t3 ORDER BY
color_type,in_date;
+------------+------------+-------------+
| color_type | in_date
| color_count |
+------------+------------+-------------+
| 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 |
+------------+------------+-------------+
9 rows in set
gbase> SELECT NVL(color_type,'') as color_type_show,NVL(DECODE(co
lor_type,NULL,f_YearMonth || '合计',NVL(f_YearMonth,color_type || ' 小
计')),'总计') AS f_YearMonth_show,SUM(color_count) FROM (SELECT c
olor_type,DATE_FORMAT(in_date, '%Y-%m') as f_YearMonth,color_coun
t FROM t3) t GROUP BY CUBE(color_type,f_YearMonth) ORDER BY
color_type,f_YearMonth;
+-----------------+------------------+------------------+
| color_type_show | f_YearMonth_show | SUM(color_count) |

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
886
+-----------------+------------------+------------------+
| 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 |
|
| 2010-09 合计
|
97 |
|
| 2010-10 合计
|
134 |
|
| 总计
|
231 |
+-----------------+------------------+------------------+
12 rows in set

Function parameter specified isnt an OUT parameter
GBase 8s 函数只能具有一个 OUT 参数,它通常为最后一个参数。

概述
要使用全文检索功能,首先需要建立一个表存储数据源信息,将要查询的文本内
容放到数据表中,然后将查询的文本内容列创建全文索引,当表中有内容更新时
也要更新索引,这样就可使用全文检索查询语法进行查询。具体语法包括创建索
引,更改索引,更新索引,删除索引和查询等操作,下面就以手机短信息检索的
例子进行说明,快速了解全文检索的使用方法,具体语法说明请参考后面章节。
示例
示例1:创建一个存储短信信息的表sms,包括手机号和短信内容两个字段。
gbase> CREATE TABLE sms (MB_No char(11), MB_Text varchar(1000)
DEFAULT NULL);
Query OK, 0 rows affected
示例2:创建全文索引,索引名称:idx_t,索引列:MB_Text。
gbase> CREATE FULLTEXT index idx_t ON sms(MB_Text);
Query OK, 0 rows affected
Records: 0
Duplicates: 0
Warnings: 0
插入示例数据信息
INSERT INTO sms VALUES('13023315123','南大开设java 编程培训班,每
周五晚上7:00-9:00 上课');
INSERT INTO sms VALUES('13521000123','天津大学开设考研培训班,学
期3 个月,每周六、日上课,欢迎报名,咨询40088800');
INSERT INTO sms value('13023315123','晚上去南大上英语课,在南大主楼

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
913
115 房间');
INSERT INTO sms VALUES('13023315123','周末去天津博物馆参观,在南
开区南门外大街公交车站集合。');
INSERT INTO sms VALUES('13023300023','本公司负责办理各种文*凭、

/件,绝对保真,电话联系:022-30088200。');
INSERT INTO sms VALUES('13023300023','明天去公司办公柜里查找合同
文件、档案和报销凭证。');
INSERT INTO sms VALUES('13988213328','周六上午9 点去水上公园,在
东门集合,对着天津天塔');
INSERT INTO sms VALUES('13323315181','南大通用数据技术股份有限公
司地址:
天津华苑产业区海泰发展六道6 号海泰绿色产业基地J 座(300384)');
INSERT INTO sms VALUES('13521015341','本小学为6 到12 岁儿童开办语
文、数学和英语培训班');
示例3:手动更新索引
gbase> UPDATE INDEX idx_t ON sms;
Query OK, 9 rows affected
示例4:查询建立的索引(包括全文索引)
gbase> SHOW INDEX FROM sms;
因为结果集列数较多,分为多行显示
+-------+------------+----------+--------------+-------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name |
+-------+------------+----------+--------------+-------------+
| sms
|
1 | idx_t
|
1 | MB_Text
|
+-------+------------+----------+--------------+-------------+
+-----------+-------------+----------+--------+
| Collation | Cardinality | Sub_part | Packed |
+-----------+-------------+----------+--------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
914
| NULL
|
NULL |
NULL | NULL
|
+-----------+-------------+----------+--------+
+------+------------+---------+
| Null | Index_type | Comment |
+------+------------+---------+
| YES
|
FULLTEXT
|
|
+------+------------+---------+
1 rows in set
示例5:搜索查询
gbase> SELECT COUNT(*) FROM sms WHERE contains(MB_Text, '南大通
用');
+----------+
| COUNT(*) |
+----------+
|
1 |
+----------+
1 row in set
示例6:查询包括天津或者培训班文字、并且不包含“水上”文字的数据条数:
gbase> SELECT COUNT(*) FROM sms WHERE contains(MB_Text, '"天津"
| "培训班" - "水上"');
+----------+
| COUNT(*) |
+----------+
|
5 |
+----------+
1 row in set

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
915
示例7:想具体查看一下135 开头的手机号收到的包括天津或者培训班词组、并
且不包含“水上”词组的短信内容:
gbase> SELECT LEFT(MB_Text,30) FROM sms WHERE
contains(MB_Text, '("天津" | "培训班") - "水上"') AND MB_No like '135%';
+--------------------------------------------------------------+
| LEFT(MB_Text,30)
|
+--------------------------------------------------------------+
| 本小学为6 到12 岁儿童开办语文、数学和英语培训班
|
| 天津大学开设考研培训班,学期3 个月,每周六、日上课,欢迎报名|
+--------------------------------------------------------------+
2 rows in set
示例8:搜索以南大词组开头的短信内容:
gbase> SELECT * FROM sms WHERE contains(MB_Text, '^"南大"');
+-------------+-----------------------------------------------------------------------------------
-------------------------------------------------+
| MB_No
| MB_Text
|
+-------------+-----------------------------------------------------------------------------------
-------------------------------------------------+
| 13023315123 | 南大开设java 编程培训班,每周五晚上7:00-9:00 上课
|
| 13323315181 | 南大通用数据技术股份有限公司地址:天津华苑产业区海泰
发展六道6 号海泰绿色产业基地J 座(300384)
|
+-------------+-----------------------------------------------------------------------------------
-------------------------------------------------+
2 rows in set
示例9:要查询制作假文凭的垃圾短信内容:
gbase> SELECT MB_Text FROM sms WHERE contains(MB_Text, '"文凭

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
916
"/2');
+--------------------------------------------------------------+
| MB_Text
|
+--------------------------------------------------------------+
| 明天去公司办公柜里查找合同文件、档案和报销凭证。
|
| 本公司办理各种文*凭、证/件,绝对保真,联系电话:022-30088200。|
+--------------------------------------------------------------+
2 rows in set
示例10:从上面信息中发现正常的短信也查询出来了,修改查询语句为:
gbase> SELECT MB_Text FROM sms WHERE contains(MB_Text,
'NEAR((文,凭),4,1)');
+--------------------------------------------------------------+
| MB_Text
|
+--------------------------------------------------------------+
| 本公司办理各种文*凭、证/件,绝对保真,联系电话:022-30088200。|
+--------------------------------------------------------------+
1 row in set
示例11:查询包含“南大”词组的短信并且按照no 倒排序。
gbase> SELECT MB_No AS no,MB_Text FROM sms WHERE
contains(MB_Text, '"南大"',1) ORDER BY no DESC;
+-------------+------------------------------------------------------------------+
| no
| MB_Text
|
+-------------+------------------------------------------------------------------+
| 13323315181 | 南大通用数据技术股份有限公司地址:天津华苑产业区海泰
发展六道6 号海泰绿色产业基地J 座(300384)
|
| 13023315123 | 晚上去南大上英语课,在南大主楼115 房间

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
917
|
| 13023315123 | 南大开设java 编程培训班,每周五晚上7:00-9:00 上课
|
+-------------+------------------------------------------------------------------+
3 rows in set