У меня есть таблица, и я хотел бы вытянуть одну строку на идентификатор со связанными значениями полей.
В моей таблице, например, у меня есть это:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
И я хотел бы произвести:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
В MySQL я смог использовать агрегатную функцию GROUP_CONCAT
, но это, кажется, не работает здесь... Существует ли эквивалент для PostgreSQL или другой способ выполнить это?
Вероятно, это хорошая отправная точка (только для версии 8.4+):
SELECT id_field, array_agg(value_field1), array_agg(value_field2)
FROM data_table
GROUP BY id_field
array_agg возвращает массив, но вы можете преобразовать его в текст и отредактировать по мере необходимости (см. Пояснения ниже).
До версии 8.4 вы должны определить его самостоятельно перед использованием:
CREATE AGGREGATE array_agg (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = '{}'
);
(перефразировано из документации PostgreSQL)
Уточнения: