así que tengo esta tabla:cómo hacer ARRAY_AGG() funcionar como GROUP_CONCAT() de MySQL
create table test (
id integer,
rank integer,
image varchar(30)
);
A continuación, 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 ello y concatenar la nombre de la imagen en el orden dado por el rango. En MySQL que pueda 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 que pueda 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 la manera de ordenarlos. (Yo estaba usando PostgreSQL 8.4)
en realidad si añado más filas a mi tabla de prueba esta solución no funciona. Sorprendentemente, no funciona para mí, incluso si cargué la tabla en el orden correcto. Sin embargo, su solución funciona en postgresql 8.4 solo si clasifico la subconsulta tanto por id como por rango. raro si me preguntas – user491575
La solución alternativa es un poco hacky y parece mostrar para usted. Sospecho que hay una diferencia de plan de consulta causando esto. Tengo cierta curiosidad sobre cuál es el resultado de 'EXPLAIN' con el mal resultado. En cualquier caso, he actualizado mi respuesta con 'ORDER BY id, rank'. –
Primero quiero agradecerle la respuesta. Resuelve el problema que tuve. – user491575