J'ai donc ce tableau:comment faire array_agg() travailler comme group_concat() de mySQL
create table test (
id integer,
rank integer,
image varchar(30)
);
Puis quelques valeurs:
id | rank | image
---+------+-------
1 | 2 | bbb
1 | 3 | ccc
1 | 1 | aaa
2 | 3 | c
2 | 1 | a
2 | 2 | b
Je veux les regrouper par identifiant et concaténer la nom de l'image dans l'ordre donné par le rang. En mySQL je peux le faire:
select id,
group_concat(image order by rank asc separator ',')
from test
group by id;
Et la sortie serait:
1 aaa,bbb,ccc 2 a,b,cEst-il possible que je peux avoir cela en postgresql?
Si j'essaie d'utiliser array_agg() les noms ne s'afficheront pas dans le bon ordre et apparemment je n'ai pas réussi à trouver un moyen de les trier. (J'utilisais postgres 8.4)
en fait, si j'ajouter des lignes à ma table de test cette solution ne fonctionne pas. Assez étonnamment ne fonctionne pas pour moi même si je charge la table dans le bon ordre. Cependant, votre solution ne fonctionne dans postgresql 8.4 que si je trier la sous-requête par son identifiant et son rang. bizarre si vous me demandez – user491575
La solution de contournement est un peu hacky et il semble montrer pour vous. Je soupçonne qu'il y a une différence de plan de requête provoquant ceci. Je suis un peu curieux de savoir quelle est votre sortie 'EXPLAIN' avec le mauvais résultat. Dans tous les cas, j'ai mis à jour ma réponse avec 'ORDER BY id, rank'. –
Je veux d'abord vous remercier pour la réponse. Cela résout le problème que j'avais. – user491575