PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verketten Sie mehrere Zeilen in einem Array mit SQL auf PostgreSQL

Dies ist ein seit einigen Versionen in Postgres integriertes, so dass Sie kein eigenes mehr definieren müssen, der Name ist array_agg() .

test=> select array_agg(n) from generate_series(1,10) n group by n%2;
  array_agg   
--------------
 {1,3,5,7,9}
 {2,4,6,8,10}

(Dies ist Postgres 8.4.8).

Beachten Sie, dass kein ORDER BY angegeben ist, die Reihenfolge der Ergebniszeilen also von der verwendeten Gruppierungsmethode (hier Hash) abhängt, also nicht definiert ist. Beispiel:

test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
 ?column? |  array_agg   
----------+--------------
        1 | {1,3,5,7,9}
        0 | {2,4,6,8,10}

test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
 text |  array_agg   
------+--------------
 0    | {2,4,6,8,10}
 1    | {1,3,5,7,9}

Jetzt weiß ich nicht, warum Sie {10,2,4,6,8} erhalten und {9,7,3,1,5} , seit generate_series() sollte die Zeilen der Reihe nach senden.