PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Concatena più righe in un array con SQL su PostgreSQL

Questo è un Postgres integrato da alcune versioni, quindi non è più necessario definirne uno tuo, il nome è 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}

(questo è Postgres 8.4.8).

Nota che nessun ORDER BY è specificato, quindi l'ordine delle righe dei risultati dipende dal metodo di raggruppamento utilizzato (qui, hash), ovvero non è definito. Esempio:

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}

Ora, non so perché ottieni {10,2,4,6,8} e {9,7,3,1,5} , poiché generate_series() dovrebbe inviare le righe in ordine.