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

如何将SQL查询结果按City分组并合并Category字段值?

解决方案:按城市分组合并分类为逗号分隔字符串

根据需求,需将关联查询结果按City分组,把同一城市的多个Category值合并为逗号分隔的字符串,以下是主流数据库的实现方案:

MySQL/MariaDB

使用GROUP_CONCAT()函数实现字符串聚合:

SELECT 
    B.City,
    GROUP_CONCAT(C.Category SEPARATOR ', ') AS category
FROM Business B
INNER JOIN Category C ON B.id = C.business_id
GROUP BY B.City;

GROUP_CONCAT()默认以逗号分隔,显式指定SEPARATOR ', '可确保格式与需求完全匹配。

PostgreSQL

使用STRING_AGG()函数:

SELECT 
    B.City,
    STRING_AGG(C.Category, ', ') AS category
FROM Business B
INNER JOIN Category C ON B.id = C.business_id
GROUP BY B.City;

SQL Server

  • SQL Server 2017及以上版本:直接使用STRING_AGG()
SELECT 
    B.City,
    STRING_AGG(C.Category, ', ') AS category
FROM Business B
INNER JOIN Category C ON B.id = C.business_id
GROUP BY B.City;
  • SQL Server 2016及更早版本:通过STUFF结合FOR XML PATH实现
SELECT 
    DISTINCT B.City,
    STUFF((
        SELECT ', ' + C2.Category
        FROM Category C2
        WHERE C2.business_id = B.id
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS category
FROM Business B
INNER JOIN Category C ON B.id = C.business_id;

Oracle

使用LISTAGG()函数,可按需指定分类排序顺序:

SELECT 
    B.City,
    LISTAGG(C.Category, ', ') WITHIN GROUP (ORDER BY C.Category) AS category
FROM Business B
INNER JOIN Category C ON B.id = C.business_id
GROUP BY B.City;

若无需排序,可去掉ORDER BY C.Category部分。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:31:49