2017-08-09 33 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