Таблица 'животные':
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
Запрос:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
Ожидаемый результат:
Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
Могу ли я быть уверен, что порядок в первой агрегатной функции всегда будет таким же, как и во второй. То есть я бы не хотел получить:
Tom;Jerry;Kermit, Frog;Mouse,Cat
string_agg()
Ответы:
Если вы используете PostgreSQL версии <9.0, тогда:
От: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
Итак, в вашем случае вы должны написать:
Затем ввод в array_agg будет неупорядоченным, но будет одинаковым в обоих столбцах. И если хотите, можете добавить
ORDER BY
в подзапрос предложение.источник
Используйте ORDER BY, как в этом примере из руководства :
источник
ORDER BY
inarray_agg
вводится в PostgreSQL 9array_agg(DISTINCT a ORDER BY b)
array_agg((a, b, c) ORDER BY b)