MySQL中按字段分组拼接CONCAT结果的SQL查询实现
按分组合并字符串的SQL解决方案
你需要的是分组后聚合拼接字符串,原来的SQL只是对每行单独做拼接,没有执行分组和聚合操作,所以无法将同一组的结果合并成单个字段。以下是不同数据库环境下的实现方案:
MySQL/MariaDB 实现
使用GROUP_CONCAT函数完成分组字符串聚合:
SELECT b, GROUP_CONCAT(CONCAT(b, '-', c) SEPARATOR ', ') AS merged_str FROM viborka GROUP BY b;
执行后结果:
| b | merged_str |
|---|---|
| x | x-3, x-7 |
| y | y-4, y-9 |
PostgreSQL 实现
使用STRING_AGG函数:
SELECT b, STRING_AGG(CONCAT(b, '-', c), ', ') AS merged_str FROM viborka GROUP BY b;
SQL Server 实现
2017及以上版本
直接使用STRING_AGG:
SELECT b, STRING_AGG(CONCAT(b, '-', c), ', ') AS merged_str FROM viborka GROUP BY b;
2016及以下版本
通过FOR XML PATH方式拼接:
SELECT b, STUFF(( SELECT ', ' + CONCAT(b, '-', c) FROM viborka v2 WHERE v2.b = v1.b FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS merged_str FROM viborka v1 GROUP BY b;
Oracle 实现
使用LISTAGG函数:
SELECT b, LISTAGG(CONCAT(b, '-', c), ', ') WITHIN GROUP (ORDER BY a) AS merged_str FROM viborka GROUP BY b;
WITHIN GROUP (ORDER BY a)用来保证拼接顺序和原表中a的顺序一致,可根据需求调整排序字段。
内容的提问来源于stack exchange,提问作者Aktano
相关产品推荐
相关产品推荐

