SQL - 如何根据另一列对一列进行分组

SQL - How to group a column based on another column

我想按“ID”列分组,但连接“国家/地区”列并用逗号分隔。这可能吗?

主要table样本:

ID Country
01 US
02 BR
02 CR

期望:

ID Country
01 US
02 BR,CR

根据您使用的 DBMS,可以使用不同的函数来解决您的问题。一般来说,它属于聚合函数的class,因此,它需要一个你想要聚合的列(在你的例子中Country)和一个你想要分组的可选列(在你的情况 ID).


鉴于MySQL, SQLite and MariaDB官方文档,可以使用GROUP_CONCAT聚合函数:

SELECT ID,
       GROUP_CONCAT(Country)
FROM tab 
GROUP BY ID

在相应的 links 尝试 MySQL, SQLite or MariaDB 演示。


鉴于Postgres and SQLServer官方文档,可以使用STRING_AGG聚合函数:

SELECT ID,
       STRING_AGG(Country, ',')
FROM tab 
GROUP BY ID

在相应的 links 尝试 PostgreSQL or SQLServer 演示。


鉴于OracleDB官方文档,可以使用LISTAGG聚合函数:

SELECT ID,
       LISTAGG(Country, ',') WITHIN GROUP (ORDER BY Country) Country
FROM tab 
GROUP BY ID

在相应的 link.

尝试 OracleDB 演示

希望这足够全面,可以帮助未来的人们使用最流行的数据库在字符串上进行聚合。