Tabla 'animales':
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
Consulta:
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
¿Puedo estar seguro de que el orden en la primera función agregada siempre será el mismo que en la segunda? Quiero decir que no me gustaría conseguir:
Tom;Jerry;Kermit, Frog;Mouse,Cat
string_agg()
Respuestas:
Si tiene una versión de PostgreSQL <9.0, entonces:
De: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
Entonces en tu caso escribirías:
La entrada al array_agg estaría desordenada pero sería la misma en ambas columnas. Y si lo desea, puede agregar una
ORDER BY
cláusula a la subconsulta.fuente
Utilice un ORDER BY, como este ejemplo del manual :
fuente
ORDER BY
en elarray_agg
se introduce en PostgreSQL 9array_agg(DISTINCT a ORDER BY b)
array_agg((a, b, c) ORDER BY b)