昨天遇到一个sql问题,需要将一个表中的某一列的多行数据拼接成一行
例如:表中有2列数据:
列1 列2
AAA 企业1
AAA 企业2
AAA 企业3
BBB 企业4
BBB 企业5
我想把这个表变成如下格式:
列1 列2
AAA 企业1,企业2,企业3
BBB 企业4,企业5
类似sqlServer中的stuff函数在PostgreSQL中如何实现呢?
查了一些资料,找到2种比较简单方便的方法,总结一下。
方法一:
SELECT
列1, string_agg(列2,',') AS 别名
FROM
表名
GROUP BY 列1 ;
方法二(推荐使用):
SELECT
列1, array_to_string(ARRAY(SELECT unnest(array_agg(列2))),',') AS 别名
FROM
表名
GROUP BY 列1;
如果需要排序后再拼接:
SELECT
列1, array_to_string(ARRAY(SELECT unnest(array_agg(列2 order by 列2 desc))),',') AS 别名
FROM
表名
GROUP BY 列1;