sql >> Base de Datos >  >> RDS >> PostgreSQL

Concatenar varias filas en una matriz con SQL en PostgreSQL

Este es un Postgres incorporado desde algunas versiones, por lo que ya no necesita definir el suyo propio, el nombre es 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}

(esto es Postgres 8.4.8).

Tenga en cuenta que no ORDER BY se especifica, por lo que el orden de las filas de resultados depende del método de agrupación utilizado (aquí, hash), es decir, no está definido. Ejemplo:

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}

Ahora, no sé por qué obtienes {10,2,4,6,8} y {9,7,3,1,5} , ya que generate_series() debe enviar las filas en orden.