2017-08-09 211 views
0

我移植一些MySQL的代码给Postgres并且具有一个时间赫克转换下面一行:如何将MySQL GROUP_CONCAT更改为PostgreSQL string_agg?

GROUP_CONCAT(
    DISTINCT id,':',foo,':',bar ORDER BY id 
) as id, 

这将导致一个逗号分隔像字符串列表:

ID:FOO :bar,id2:foo2:bar2

'DISTINCT'是为了避免重复。

我读过Postgres中GROUP_CONCAT的等价物是string_agg,但我无法弄清楚如何使它以相同的方式工作。

编辑:我可能已经差不多回答了我自己的问题。我想出了使用CONCAT的解决方案。这里的问题是,现在排序是由连接字符串,而不是由ID进行:

string_agg(DISTINCT CONCAT(
    id::text, ':', foo, ':', bar, ':' 
), ',') as id 

如果我尝试添加“ORDER BY ID”我得到一个错误。

回答

1

你可以做下面的事情。

select 
string_agg(DISTINCT CONCAT(
    id::text, ':', foo, ':', bar, ':' 
), ',') as id from (select * from table t order by id) as al