PostgreSQL中如何将同组行数据合并为单行?已试crosstab无效
PostgreSQL 同组字符串拼接实现方法
你需要将同一foreign_key_id下的name字段值拼接成单个字符串,crosstab是用于行列转置的工具,并不适合这类字符串聚合场景,PostgreSQL提供了专门的string_agg聚合函数来实现这个需求:
基础实现(统一分隔符)
如果是统一使用分号分隔(你示例里最后一个逗号可能是笔误),可以直接用以下SQL:
SELECT foreign_key_id, string_agg(name, ';') AS name FROM your_table_name -- 替换成你的实际表名 GROUP BY foreign_key_id;
执行后会得到:
| foreign_key_id | name |
|---|---|
| 1700 | Joe;Mark;Luke;Peter;James |
特殊分隔符处理(如示例最后用逗号)
如果确实需要最后一个分隔符为逗号,你可以先将字段转为数组,再通过字符串拼接实现:
SELECT foreign_key_id, CONCAT( array_to_string(array_agg(name)[1:array_length(array_agg(name), 1)-1], ';'), ',', array_agg(name)[array_length(array_agg(name), 1)] ) AS name FROM your_table_name GROUP BY foreign_key_id;
这个写法会把前N-1个元素用分号连接,最后一个元素用逗号拼接在末尾,得到你示例中的格式。
内容的提问来源于stack exchange,提问作者toch
相关产品推荐
相关产品推荐

