„Zwierzęta” stołowe:
animal_name animal_type
Tom Cat
Jerry Mouse
Kermit Frog
Pytanie:
SELECT
array_to_string(array_agg(animal_name),';') animal_names,
array_to_string(array_agg(animal_type),';') animal_types
FROM animals;
Spodziewany wynik:
Tom;Jerry;Kerimt, Cat;Mouse;Frog
OR
Tom;Kerimt;Jerry, Cat;Frog;Mouse
Czy mogę mieć pewność, że kolejność w pierwszej funkcji agregującej będzie zawsze taka sama jak w drugiej. To znaczy nie chciałbym dostać:
Tom;Jerry;Kermit, Frog;Mouse,Cat
string_agg()
Odpowiedzi:
Jeśli używasz PostgreSQL w wersji <9.0, to:
Od: http://www.postgresql.org/docs/8.4/static/functions-aggregate.html
Więc w twoim przypadku napisałbyś:
Dane wejściowe do array_agg byłyby wówczas nieuporządkowane, ale byłyby takie same w obu kolumnach. A jeśli chcesz, możesz dodać
ORDER BY
klauzulę do podzapytania.źródło
Użyj ORDER BY, jak w tym przykładzie z instrukcji :
źródło
ORDER BY
warray_agg
wprowadzany jest w PostgreSQL 9array_agg(DISTINCT a ORDER BY b)
array_agg((a, b, c) ORDER BY b)