如何将MySQL组_CONCAT更改为PostgreSQL字符串_agg?
我正在将一些MySQL代码迁移到Postgres,并花了很长时间转换以下代码行:如何将MySQL组_CONCAT更改为PostgreSQL字符串_agg?,mysql,postgresql,Mysql,Postgresql,我正在将一些MySQL代码迁移到Postgres,并花了很长时间转换以下代码行: GROUP_CONCAT( DISTINCT id,':',foo,':',bar ORDER BY id ) as id, 这将产生一个逗号分隔的字符串列表,如: id:foo:bar,id2:foo2:bar2 “独特”是为了避免重复 我读过Postgres中与GROUP_CONCAT等效的字符串是string_agg,但我不知道如何让它以同样的方式工作 编辑:我可能已经几乎回答了我自己的问题。我
GROUP_CONCAT(
DISTINCT id,':',foo,':',bar ORDER BY id
) as id,
这将产生一个逗号分隔的字符串列表,如:
id:foo:bar,id2:foo2:bar2
“独特”是为了避免重复
我读过Postgres中与GROUP_CONCAT等效的字符串是string_agg,但我不知道如何让它以同样的方式工作
编辑:我可能已经几乎回答了我自己的问题。我想出了使用CONCAT的解决方案。这样做的问题是,现在排序是由连接的字符串而不是id完成的:
string_agg(DISTINCT CONCAT(
id::text, ':', foo, ':', bar, ':'
), ',') as id
如果我尝试添加“ORDER BY id”,则会出现错误。您可以执行以下操作
select
string_agg(DISTINCT CONCAT(
id::text, ':', foo, ':', bar, ':'
), ',') as id from (select * from table t order by id) as al