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)