GROUP_CONCAT 函数
GROUP_CONCAT 函数用于将同一分组内的多个字符串值连接成一个字符串。
核心语法
GROUP_CONCAT ( [DISTINCT] expr [ORDER BY ... [ASC/DESC]] [topN xxxx] [SEPARATOR 'xxxx'] )
⚙ 参数说明| 参数部分 | 说明 |
| DISTINCT | 可选。去除同一分组内聚集列的重复值。默认保留重复值。 |
| expr | 必选。需要聚合的列或基于列的表达式。 |
| ORDER BY ... | 可选。指定聚合时值的排序方式,以控制连接后字符串的顺序。支持多列排序。 |
| topN xxxx | 可选。限制同一分组内最多输出的行值个数。 topN 为0时,函数返回 NULL 。 |
| SEPARATOR 'xxxx' | 可选。指定连接值之间的分隔符。默认使用半角逗号(,)。 |
功能特点与限制
长度限制:连接后字符串的长度受系统参数 group_concat_max_len 的限制(默认值为1024字节)。如果结果可能超长,需要预先调整此参数。
SET GLOBAL group_concat_max_len = 10240;
数据类型支持:该函数理论上对数据类型没有限制,但暂不支持 BLOB 和 LONGBLOB 数据类型。
参数互斥: DISTINCT 参数和 ORDER BY 子句是互斥的,不能同时使用。
使用示例
假设有表 t1 ,包含 id 和 name 两列。以下查询将每个 id 分组下的 name 用 "++" 连接起来,并按照 id 排序:
SELECT id, GROUP_CONCAT(name SEPARATOR '++') WITHIN (ORDER BY id) AS concatenated_names
FROM t1
GROUP BY id;
等价函数
STRING_AGG 函数与 GROUP_CONCAT 功能相同,语法也基本一致。
SELECT id, STRING_AGG(name SEPARATOR '++') WITHIN (ORDER BY id) AS test FROM t1 GROUP BY id;
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17528