group_concat
功能
将分组中的多个非 NULL 值连接成一个字符串,参数 sep
为字符串之间的连接符,该参数可选,默认为 ,
。该函数在连接时会忽略 NULL 值。
从 3.0.6,3.1.3 版本开始,group_concat 支持使用 DISTINCT 和 ORDER BY。
语法
VARCHAR GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR sep])
参数说明
expr
: 待拼接的值,支持的数据类型为 VARCHAR。可以指定 DISTINCT 关键字在连接之前移除分组中的重复值。如果想直接连接多个值,可以使用 concat 和 concat_ws 来指定连接的方式。- ORDER BY 后可以跟 unsigned_integer (从 1 开始)、列名、或普通表达式。ORDER BY 用于指定按升序或降序对要连接的值进行排序。默认按升序排序。如果要按降序排序,需要指定 DESC。
sep
:字符串之间的连接符,可选。如果不指定,则默认使用逗号,
作为连接符。如果要使用空字符来连接,可以使用''
。
NOTE
从 v3.0.6 和 v3.1.3 版本起,分隔符必须使用
SEPARATOR
关键字来声明。 举例,select group_concat(name SEPARATOR '-') as res from ss;
。
返回值说明
返回值的数据类型为 VARCHAR。如果没有非 NULL 值,则返回 NULL。
您可以使用系统变量 group_concat_max_len 来控制可以返回的最大字符长度。默认值:1024。最小值:4。单位:字符。
变量的设置方法:
SET [GLOBAL | SESSION] group_concat_max_len = <value>
示例
-
建表并插入数据。
CREATE TABLE `ss` (
`id` int(11) NULL COMMENT "",
`name` varchar(255) NULL COMMENT "",
`subject` varchar(255) NULL COMMENT "",
`score` int(11) NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 4
PROPERTIES (
"replication_num" = "1"
);
insert into ss values (1,"Tom","English",90);
insert into ss values (1,"Tom","Math",80);
insert into ss values (2,"Tom","English",NULL);
insert into ss values (2,"Tom",NULL,NULL);
insert into ss values (3,"May",NULL,NULL);
insert into ss values (3,"Ti","English",98);
insert into ss values (4,NULL,NULL,NULL);
insert into ss values (NULL,"Ti","Phy",98);
select * from ss order by id;
+------+------+---------+-------+
| id | name | subject | score |
+------+------+---------+-------+
| NULL | Ti | Phy | 98 |
| 1 | Tom | English | 90 |
| 1 | Tom | Math | 80 |
| 2 | Tom | English | NULL |
| 2 | Tom | NULL | NULL |
| 3 | May | NULL | NULL |
| 3 | Ti | English | 98 |
| 4 | NULL | NULL | NULL |
+------+------+---------+-------+