Tabelle 'Tiere':
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
Abfrage:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
Erwartetes Ergebnis:
Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
Kann ich sicher sein, dass die Reihenfolge in der ersten Aggregatfunktion immer dieselbe ist wie in der zweiten. Ich meine, ich möchte nicht bekommen:
Tom;Jerry;Kermit, Frog;Mouse,Cat
string_agg()
Antworten:
Wenn Sie eine PostgreSQL-Version <9.0 verwenden, gilt Folgendes:
Von: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
In Ihrem Fall würden Sie also schreiben:
Die Eingabe in das array_agg wäre dann ungeordnet, aber in beiden Spalten gleich. Und wenn Sie
ORDER BY
möchten, können Sie der Unterabfrage eine Klausel hinzufügen.quelle
Verwenden Sie ein ORDER BY wie in diesem Beispiel aus dem Handbuch :
quelle
ORDER BY
inarray_agg
wird in PostgreSQL 9array_agg(DISTINCT a ORDER BY b)
array_agg((a, b, c) ORDER BY b)