Tabela 'animais':
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
Inquerir:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
Resultado esperado:
Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
Posso ter certeza de que a ordem na primeira função de agregação será sempre a mesma que na segunda. Quer dizer, eu não gostaria de obter:
Tom;Jerry;Kermit, Frog;Mouse,Cat
postgresql
array-agg
Olo
fonte
fonte
string_agg()
Respostas:
Se você estiver em uma versão PostgreSQL <9.0, então:
De: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
Então, no seu caso, você escreveria:
A entrada para array_agg seria então desordenada, mas seria a mesma em ambas as colunas. E se quiser, você pode adicionar uma
ORDER BY
cláusula à subconsulta.fonte
Use um ORDER BY, como este exemplo do manual :
fonte
ORDER BY
inarray_agg
é apresentado no PostgreSQL 9array_agg(DISTINCT a ORDER BY b)
array_agg((a, b, c) ORDER BY b)