Поскольку PostgreSQL 9.0 (выпущен в сентябре 2010 г.), существует агрегатная функция
string_agg()
, чтобы сделать то, что вы хотите:
SELECT string_agg(field1, ';') FROM tbl GROUP BY id;
Обратите внимание, что вторым параметром является разделитель (аналогично другим агрегатным функциям).
Существует также строковая функция concat_ws()
начиная с PostgreSQL 9.1 , которая в остальном работает так же, как MySQL concat_ws()
(если не используется как агрегатная) функция). Особенно полезно иметь дело со значениями NULL
.
SELECT concat_ws(';', field1, field2, field3) FROM tbl
Вы можете даже объединить оба, чтобы объединить несколько столбцов любым способом.
SELECT id, string_agg(concat_ws(',', field1, field2, field3), ';') AS fields
FROM tbl
GROUP BY id;