string_agg recorrer ejemplos array_agg array postgresql array-agg

postgresql - recorrer - cómo hacer que array_agg() funcione como group_concat() desde mySQL



string to array postgresql (1)

En PostgreSQL 8.4 no puede ordenar explícitamente array_agg pero puede array_agg ordenando las filas pasadas al grupo / agregado con una subconsulta:

SELECT id, array_to_string(array_agg(image), '','') FROM (SELECT * FROM test ORDER BY id, rank) x GROUP BY id;

En PostgreSQL 9.0, las expresiones agregadas pueden tener una cláusula ORDER BY :

SELECT id, array_to_string(array_agg(image ORDER BY rank), '','') FROM test GROUP BY id;

Así que tengo esta tabla:

create table test ( id integer, rank integer, image varchar(30) );

Entonces algunos valores:

id | rank | image ---+------+------- 1 | 2 | bbb 1 | 3 | ccc 1 | 1 | aaa 2 | 3 | c 2 | 1 | a 2 | 2 | b

Quiero agruparlos por ID y concatenar el nombre de la imagen en el orden dado por rango. En mySQL puedo hacer esto:

select id, group_concat( image order by rank asc separator '','' ) from test group by id;

Y la salida sería:

1 aaa,bbb,ccc 2 a,b,c ¿Hay alguna manera de tener esto en postgresql?

Si trato de usar array_agg (), los nombres no se mostrarán en el orden correcto y aparentemente no pude encontrar una manera de ordenarlos. (Yo estaba usando postgres 8.4)