Tableau 'animaux':
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
Requete:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
Résultat attendu:
Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
Puis-je être sûr que l'ordre dans la première fonction d'agrégation sera toujours le même que dans la seconde. Je veux dire que je n'aimerais pas avoir:
Tom;Jerry;Kermit, Frog;Mouse,Cat
string_agg()
Réponses:
Si vous utilisez une version PostgreSQL <9.0, alors:
De: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
Donc, dans votre cas, vous écririez:
L'entrée de array_agg ne serait alors pas ordonnée mais ce serait la même chose dans les deux colonnes. Et si vous le souhaitez, vous pouvez ajouter une
ORDER BY
clause à la sous-requête.la source
Utilisez un ORDER BY, comme cet exemple du manuel :
la source
ORDER BY
dansarray_agg
est introduit dans PostgreSQL 9array_agg(DISTINCT a ORDER BY b)
array_agg((a, b, c) ORDER BY b)