So habe ich diese Tabelle:wie array_agg() funktioniert wie Group_concat() von mySQL machen
create table test (
id integer,
rank integer,
image varchar(30)
);
Dann sind einige Werte:
id | rank | image
---+------+-------
1 | 2 | bbb
1 | 3 | ccc
1 | 1 | aaa
2 | 3 | c
2 | 1 | a
2 | 2 | b
Ich möchte, dass sie von ID-Gruppe und verketten die Bildname in der Reihenfolge nach Rang. In mySQL kann ich dies tun:
select id,
group_concat(image order by rank asc separator ',')
from test
group by id;
Und würde der Ausgang sein:
1 aaa,bbb,ccc 2 a,b,cGibt es eine Weise, die ich dies in postgresql haben kann?
Wenn ich versuche, array_agg() zu verwenden, werden die Namen nicht in der richtigen Reihenfolge angezeigt und anscheinend war ich nicht in der Lage, eine Möglichkeit zu finden, sie zu sortieren. (I wurde mit Postgres 8,4)
Eigentlich, wenn ich diese Lösung funktioniert nicht mehr Zeilen zu meiner Test-Tabelle hinzufügen. Überraschenderweise funktioniert das nicht, auch wenn ich den Tisch in der richtigen Reihenfolge lade. Ihre Lösung funktioniert jedoch nur dann in PostgreSQL 8.4, wenn ich die Unterabfrage sowohl nach ID als auch nach Rang sortiert habe. komisch, wenn Sie mich fragen – user491575
Der Workaround ist ein bisschen hacky und es scheint für Sie zu zeigen. Ich vermute, dass es einen Abfrageplanunterschied gibt, der dies verursacht. Ich bin etwas neugierig, was Ihre EXPLAIN-Ausgabe mit dem schlechten Ergebnis ist. In jedem Fall habe ich meine Antwort mit 'ORDER BY ID, Rang 'aktualisiert. –
Zuerst möchte ich Ihnen für die Antwort danken. Es löst das Problem, das ich hatte. – user491575