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

如何在SQL中执行Group By并将分组内所有值转为列表?

按分组合并列值为列表的SQL实现

针对你需要按col1和col2分组,将每组的col3值合并为列表的需求,不同SQL数据库的实现方式如下:

MySQL/MariaDB

使用GROUP_CONCAT()函数拼接值,再通过CONCAT()添加方括号:

SELECT 
    col1,
    col2,
    CONCAT('[', GROUP_CONCAT(col3 SEPARATOR ', '), ']') AS col3
FROM your_table
GROUP BY col1, col2;

执行结果与你期望的格式一致:

col1  col2  col3
a     john  [c, l]
a     mike  [m]
b     Karl  [i, j]

PostgreSQL

直接用ARRAY_AGG()生成数组形式的结果,默认就是带方括号的格式:

SELECT 
    col1,
    col2,
    ARRAY_AGG(col3 ORDER BY col3) AS col3
FROM your_table
GROUP BY col1, col2;

如果需要字符串形式的拼接结果,可使用STRING_AGG():

SELECT 
    col1,
    col2,
    CONCAT('[', STRING_AGG(col3, ', '), ']') AS col3
FROM your_table
GROUP BY col1, col2;

SQL Server

SQL Server 2017及以上版本支持STRING_AGG()函数,写法简洁:

SELECT 
    col1,
    col2,
    CONCAT('[', STRING_AGG(col3, ', '), ']') AS col3
FROM your_table
GROUP BY col1, col2;

若使用更早版本,可通过FOR XML PATH的方式实现拼接:

SELECT DISTINCT
    col1,
    col2,
    CONCAT('[', STUFF((SELECT ', ' + col3 
                       FROM your_table t2 
                       WHERE t2.col1 = t1.col1 AND t2.col2 = t1.col2
                       FOR XML PATH('')), 1, 2, ''), ']') AS col3
FROM your_table t1;

Oracle

Oracle 11g及以上版本推荐使用LISTAGG()函数:

SELECT 
    col1,
    col2,
    CONCAT('[', LISTAGG(col3, ', ') WITHIN GROUP (ORDER BY col3), ']') AS col3
FROM your_table
GROUP BY col1, col2;

对于Oracle 10g及更早版本,可使用非官方的WM_CONCAT()函数(注意兼容性):

SELECT 
    col1,
    col2,
    CONCAT('[', WM_CONCAT(col3), ']') AS col3
FROM your_table
GROUP BY col1, col2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:57:10