返回首页

gbase数据、南大通用产品文档:GBase8sGROUP BY 子句

更新日期:2024年09月11日

GROUP BY 子句将表分为几组。此子句通常与为每个这样的组生成总结值的聚集函数组
合。
编写 SELECT 语句中的某些示例显示了应用于整个表的聚集函数的用法。
本章说明应
用于行组的聚集函数。
使用不带聚集的 GROUP BY 子句与在 SELECT 子句中使用 DISTINCT(或 UNIQUE)
关键字很相似。下列查询在选择特定列中描述。
图: 查询
SELECT DISTINCT customer_num FROM orders;
还可以按以下查询编写此语句。
图: 查询
SELECT customer_num FROM orders
GROUP BY customer_num;

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 114 -

图 1和图 2返回下列行。
图: 查询结果
customer_num

101
104
106
110

124
126
127
GROUP BY 子句将行收集到组中,因此每一组中的每一行具有相同的客户号。在没有选择
任何其它列的情况下,结束是唯一 customer_num 值的列表。
GROUP BY 子句的功能在将它与聚集函数配合使用时更明显。
下列查询检索每个订单的商品数和所有商品的总价。
图: 查询
SELECT order_num, COUNT (*) number, SUM (total_price) price
FROM items
GROUP BY order_num;
GROUP BY 子句导致 items 表的行数被收集为组,每个组由具有相同 order_num 值的行组
成(即,将每个订单的商品收集在一起)。在数据库服务器构成组之后,就在每个组中应
用聚集行数 COUNT 和 SUM 。
图 4对每一组返回每一行。它还使用标号来为 COUNT 和 SUM 表达式的结果提供名称,
如下所示。
图: 查询结果
order_num number price

1001 1 $250.00
1002 2 $1200.00
1003 3 $959.00
1004 4 $1416.00

1021 4 $1614.00
1022 3 $232.00

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 115 -

1023 6 $824.00
该结果将 items 表的行收集到具有相同订单号的组中,并计算每个组中行的 COUNT 和价
格的 SUM。
不能在 GROUP BY 子句中包含 TEXT 、BYTE 、CLOB 或 BLOB 列。要进行分组,必
须能够进行排序,并且这些数据类型不存在自然排序顺序。
与 ORDER BY 子句不同,GROUP BY 子句不对数据进行排序。如果想要按特定顺序对数
据进行排序,或在投影列表中的聚集上排序,那么在 GROUP BY 子句之后包含 ORDER
BY 子句。
下列查询与图 4相同,但包括 ORDER BY 子句以按 price 的升序对检索到的行进行排序,
如下所示。
图: 查询
SELECT order_num, COUNT(*) number, SUM (total_price) price
FROM items
GROUP BY order_num
ORDER BY price;
图: 查询结果
order_num number price

1010 2 $84.00
1011 1 $99.00
1013 4 $143.80
1022 3 $232.00
1001 1 $250.00
1020 2 $438.00
1006 5 $448.00

1002 2 $1200.00
1004 4 $1416.00
1014 2 $1440.00
1019 1 $1499.97
1021 4 $1614.00
1007 5 $1696.00
选择特定列一节描述如何在 ORDER BY 子句中使用整数来指示投影列表中列的位置。还
可以在 GROUP BY 子句中使用整数来指示列名的位置或在 GROUP BY 列表中显示标
号。
以下查询返回与图 6所示相同的行。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 116 -

图: 查询
SELECT order_num, COUNT(*) number, SUM (total_price) price
FROM items
GROUP BY 1
ORDER BY 3;
构建查询时,
Projection 子句的投影列表中的所有非聚集列还必须包含在 GROUP BY 子句
中。
具有 GROUP BY 子句的 SELECT 语句必须针对每一组返回一行。
列出在 GROUP BY
后面的列能够在一组中只反映一个特异值。
并且可以返回该值。
但是,
未列出在 GROUP BY
后面的列可在包含在组中的行中包含不同的值。
下列查询显示如何在连接表的 SELECT 语句中使用 GROUP BY 子句。
图: 查询
SELECT o.order_num, SUM (i.total_price)
FROM orders o, items i
WHERE o.order_date > '01/01/98'
AND o.customer_num = 110
AND o.order_num = i.order_num
GROUP BY o.order_num;
该查询连接 orders 和 items 表,将表别名指定给它们,并返回以下所示的行。
图: 查询结果
order_num (sum)

1008 $940.00
1015 $450.00

字段文本中包含“\n”或“\r”时的处理
示例
如果在导出的数据中某字段
(通常为字符串类型,
如varchar)
中包含
“\n”

“\r”

则只对“\n”进行转义。
如果在“\n”前加转义字符(默认为“\”),“\r”不变,仍为不可见字符“\r”

使用二进制方式查看为“0x0D”。
示例1:转义“\n”的原因是文本中的内容“\n”与默认的行分隔符(LINES
TERMINATED)相同,故将文本中的“\n”转义。
示例中所用的表及数据:
DROP TABLE IF EXISTS gs;
CREATE TABLE gs (a int DEFAULT NULL, b varchar(20) DEFAULT
NULL);
INSERT INTO gs values(1,'qw\ner'),(2,'as\rdf');
导出SQL 语句:
gbase> SELECT * FROM gs INTO OUTFILE '/home/gbase/temp/n_1.txt';
Query OK, 2 rows affected
查看导出文件,cat 命令中的-b 参数表示对非空输出行进行编号:
$ cat -b n_1.txt
1
1
qw\
2
er
df
3
2
as
使用二进制方式查看导出文件:
$ hexdump -C n_1.txt
00000000
31 09 71 77 5c 0a 65 72
0a 32 09 61 73 0d 64 66
|1.qw\.er.2.as.df|
00000010
0a
|.|

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1256
00000011
示例2:如果显示的指定行分隔符为其他字符,则不发生转义。
示例中所用的表及数据:
DROP TABLE IF EXISTS gs;
CREATE TABLE gs (a int DEFAULT NULL, b varchar(20) DEFAULT
NULL);
INSERT INTO gs values(1,'qw\ner'),(2,'as\rdf');
导出SQL 语句:
gbase> SELECT * FROM gs INTO OUTFILE '/home/gbase/temp/n_2.txt'
LINES TERMINATED BY ';';
查看导出文件,导出文件中的“^M”表示“\n”:
$ vi n_2.txt
1
qw
er;2
as^Mdf;
使用二进制方式查看导出文件:
$ hexdump -C n_2.txt
00000000
31 09 71 77 0a 65 72 3b
32 09 61 73 0d 64 66 3b
|1.qw.er;2.as.df;|
00000010

在 UNIX™ 和 Linux™ 系统上安装客户机产品时,根据具体的产品和安装方法,
需要满足一定的系统需求。
UNIX 和 Linux 系统上的 Client SDK 和 GBase 8s Connect 安装方法包括:
l 作为 GBase 8s 捆绑软件介质中包含的数据库服务器安装应用程序的一部分进
行安装
l 使用独立的客户机安装应用程序进行安装
l 通过命令行脚本使用解压来安装
l 通过直接调用 JAR 文件进行安装
根据您选择的安装方法,需要不同大小的磁盘空间,如下表所述。
表 1. 安装介质和所需磁盘空间
安装介质和方法
安装所需的最小磁盘空间量
使用安装应用程序从磁盘安装
GBase 8s Connect
165 MB
Client SDK
190 MB
将安装应用程序文件下载到安装机
器。
GBase 8s Connect
315 MB

GBase 8s 客户机产品安装指南
南大通用数据技术股份有限公司 - 18 -

安装介质和方法
安装所需的最小磁盘空间量
Client SDK
340 MB
使用解压选项,然后运行命令行脚
本。
GBase 8s Connect
190 MB
Client SDK
215 MB
使用解压选项,
然后在 Linux 中运
行命令行脚本。
GBase 8s Connect
290 - 340 MB
Client SDK
315 - 365 MB
注意: 如果您使用 JRE 作为安装应用程序的一部分,那么在安装前,请确保 /tmp 目录中有
170 MB 可用空间。如果您使用的 JRE 已安装在主机上,那么只需不到 1 MB 的空间。此空间
需求包含在上表列出的磁盘空间总需求中。
请勿在安装后除去 /tmp 目录。/tmp 目录在安装和卸载期间都用来存储和管理文件。
除去此目录会破坏安装,可能需要重新安装整个产品。
Client SDK 安装需要大约 200 MB 的磁盘空间,GBase 8s Connect 安装需要大约 175
MB 的磁盘空间。
某些安装选项需要额外的磁盘空间。
某些安装选项需要额外的磁盘空
间。 在将二进制文件复制到主机之前,安装应用程序会通知您的设置所需的总磁盘空
间。
注意: 除产品的磁盘空间需求之外,在 UNIX 或 Linux 上安装之前,请确保临时目录(缺省
情况下为 /tmp)中具有 1
GB 的可用空间。这样做是为了支持安装介质的解压以及安装程序的
运行。在调用安装程序之前,可以通过将 IATEMPDIR 环境变量设置为包含足够存储空间的位置
来更改此位置。如果缺省临时位置中的空间不足,安装程序会尝试将信息写入用户帐户的主目
录。