sql >> Database >  >> RDS >> PostgreSQL

Voeg meerdere rijen in een array samen met SQL op PostgreSQL

Dit is een Postgres ingebouwd sinds een paar versies, dus u hoeft niet langer uw eigen te definiëren, de naam is 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}

(dit is Postgres 8.4.8).

Merk op dat geen ORDER BY is gespecificeerd, dus de volgorde van de resultaatrijen hangt af van de gebruikte groeperingsmethode (hier hash), dwz het is niet gedefinieerd. Voorbeeld:

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}

Nu weet ik niet waarom je {10,2,4,6,8} . krijgt en {9,7,3,1,5} , sinds generate_series() zou de rijen in volgorde moeten verzenden.



  1. dbms_metadata.get_ddl werkt niet

  2. Bash-script om waarden in MySQL in te voegen

  3. SQL Server 2012 opvragen van Access 2007-gegevens met behulp van OPENROWSET-fout

  4. Hoe te repareren "Server is niet geconfigureerd voor GEGEVENSTOEGANG" in SQL Server