跳到主要内容
版本:2.5

group_concat

功能

group_concat 将结果集中的多行结果连接成一个字符串,第二个参数 sep 为字符串之间的连接符号,该参数可选。该函数会忽略 null 值。

注: 由于是分布式计算,该函数不能保证多行数据是「有序」拼接的。该函数通常需要和 GROUP BY 语句一起使用。

语法

group_concat(VARCHAR str[, VARCHAR sep])

参数说明

  • str: 待拼接的一列值。支持的数据类型为 VARCHAR。
  • sep: 字符串之间的连接符,可选。如果未指定,默认使用逗号(,)加一个空格作为连接符。

返回值说明

返回值的数据类型为 VARCHAR。

示例

建表并插入数据。

CREATE TABLE IF NOT EXISTS group_concat (
id tinyint(4) NULL,
value varchar(65533) NULL
) ENGINE=OLAP
DISTRIBUTED BY HASH(id);

INSERT INTO group_concat VALUES
(1,'fruit'),
(2,'drinks'),
(3,null),
(4,'fruit'),
(5,'meat'),
(6,'seafood');

select * from group_concat order by id;
+------+---------+
| id | value |
+------+---------+
| 1 | fruit |
| 2 | drinks |
| 3 | NULL |
| 4 | fruit |
| 5 | meat |
| 6 | seafood |

使用 group_concat 对 value 列中的值进行拼接。

-- 不指定连接符,未有序拼接。
select group_concat(value) from group_concat;
+-------------------------------------+
| group_concat(value) |
+-------------------------------------+
| meat, fruit, seafood, fruit, drinks |
+-------------------------------------+

-- 指定空格作为连接符。
MySQL > select group_concat(value, " ") from group_concat;
+---------------------------------+
| group_concat(value, ' ') |
+---------------------------------+
| fruit meat fruit drinks seafood |
+---------------------------------+