PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Concatenar várias linhas em uma matriz com SQL no PostgreSQL


Este é um Postgres embutido desde algumas versões, então você não precisa mais definir o seu próprio, o 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}

(este é o Postgres 8.4.8).

Observe que não há ORDER BY é especificado, então a ordem das linhas de resultado depende do método de agrupamento usado (aqui, hash), ou seja, não está definido. Exemplo:
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}

Agora, não sei por que você recebe {10,2,4,6,8} e {9,7,3,1,5} , pois generate_series() deve enviar as linhas em ordem.