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

SQL中如何根据id分组将指定列值拼接汇总到结果列

SQL按分组拼接同组列值的实现方案

不同数据库的分组字符串聚合函数没有统一的SQL标准,以下是主流数据库的对应实现,基于你提供的测试表(假设表名为user_info,包含id、col1两个字段)编写:

  • MySQL / MariaDB
    使用内置GROUP_CONCAT()函数,默认分隔符为英文逗号,可自定义分隔符:

    SELECT
      id,
      GROUP_CONCAT(col1 SEPARATOR ', ') AS `values`
    FROM user_info
    GROUP BY id;
    

    注意该函数默认拼接长度上限为1024字符,若拼接内容超长,可调整group_concat_max_len参数修改上限。如果需要控制拼接值的顺序,可在函数内加ORDER BY规则,例如GROUP_CONCAT(col1 ORDER BY col1 SEPARATOR ', ')。

  • PostgreSQL
    9.0及以上版本使用STRING_AGG()函数,直接指定分隔符即可:

    SELECT
      id,
      STRING_AGG(col1, ', ') AS values
    FROM user_info
    GROUP BY id;
    
  • SQL Server
    2017及以上版本支持STRING_AGG(),写法和PostgreSQL一致:

    SELECT
      id,
      STRING_AGG(col1, ', ') AS values
    FROM user_info
    GROUP BY id;
    

    2016及更早版本需要使用FOR XML PATH兼容写法:

    SELECT
      t1.id,
      STUFF(
        (SELECT ', ' + col1 FROM user_info t2 WHERE t2.id = t1.id FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)'),1,2,''
      ) AS values
    FROM user_info t1
    GROUP BY t1.id;
    
  • Oracle
    11gR2及以上版本使用LISTAGG()函数,需要指定分组内的排序规则:

    SELECT
      id,
      LISTAGG(col1, ', ') WITHIN GROUP (ORDER BY col1) AS values
    FROM user_info
    GROUP BY id;
    

以上写法执行后,即可得到按id分组、同id下col1值拼接为新列的结果,和你给出的预期输出一致。

内容的提问来源于stack exchange,提问作者Charbel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:51:16