così ho questa tabella:come fare array_agg() funzionare come group_concat() da MySQL
create table test (
id integer,
rank integer,
image varchar(30)
);
Poi alcuni valori:
id | rank | image
---+------+-------
1 | 2 | bbb
1 | 3 | ccc
1 | 1 | aaa
2 | 3 | c
2 | 1 | a
2 | 2 | b
voglio raggrupparli per id e concatenare il nome dell'immagine nell'ordine dato per grado. In MySQL Posso fare questo:
select id,
group_concat(image order by rank asc separator ',')
from test
group by id;
E l'output sarà:
1 aaa,bbb,ccc 2 a,b,cC'è un modo per avere questo in PostgreSQL?
Se provo a utilizzare array_agg(), i nomi non verranno visualizzati nell'ordine corretto e apparentemente non sono riuscito a trovare un modo per ordinarli. (Stavo usando Postgres 8.4)
In realtà se posso aggiungere più righe alla mia tabella di prova questa soluzione non funziona. Sorprendentemente non funziona per me anche se carico la tabella nell'ordine corretto. Comunque la tua soluzione funziona con postgresql 8.4 solo se ordino la sottoquery sia per ID che per rank. strano se me lo chiedi – user491575
La soluzione è un po 'hacky e sembra mostrare per te. Sospetto che ci sia una differenza nel piano di query che causa questo. Sono piuttosto curioso di sapere quale sia l'output di 'EXPLAIN' con il risultato negativo. In ogni caso, ho aggiornato la mia risposta con 'ORDER BY id, rank'. –
Per prima cosa voglio ringraziarvi per la risposta. Risolve il problema che avevo. – user491575