You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_idname
1700Joe;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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:10:55