Ich möchte zwei Spalten mit einer Group-by-Abfrage verketten, die zu einem Array mit Klammern getrennt. Ich weiß, dass diese Frage mit this Frage in Verbindung steht, aber wie üblich ist mein Gebrauchfall ein wenig unterschiedlich.Wie zwei PostgreSQL-Spalten zu einem Array durch Klammern getrennt werden
Ein einfaches Beispiel (auch als SQL Fiddle). Derzeit meine Abfrage gibt die folgenden:
ID X Y
3 0.5 2.71
3 1.0 2.50
3 1.5 2.33
6 0.5 2.73
6 1.5 2.77
Aber wo würde Ich mag concatenate/aggregieren die X
/Y
Spalten folgendes zu erhalten:
ID XY
3 [[0.5,2.71],[1.0,2.50],[1.5,2.33]]
6 [[0.5,2.73],[1.5,2.77]]
Zur Zeit habe ich versucht, um die Spalten zu verketten in man wie folgt vor:
SELECT "ID",concat_ws(', ',"X", "Y") as XY FROM Table1;
Welche zurück:
ID xy
3 0.5, 2.71
3 1, 2.50
3 1.5, 2.33
6 0.5, 2.73
Und verwendet array_agg()
:
SELECT "ID",array_to_string(array_agg("X"),',') AS XY
FROM Table1
GROUP BY "ID";
in Resultierende:
ID xy
3 0.5,1,1.5
6 0.5
Ich glaube, ich bin immer näher, aber eine helfende Hand wäre wirklich zu schätzen.
Danke für Ihre schnelle Antwort, es funktioniert perfekt in postgresql (nicht in sqlfiddle) – Mattijn
@ Mattijn: Ihre Version ist offensichtlich 9.5 oder später. sqlfiddle ist seit einiger Zeit bei 9.3 festgefahren. –
Auch der Typ von x und y sollte gleich sein, d. H. Wenn x für Text steht, sollte y auch vom Typ text sein. Wenn nicht, müssen Sie den Typ case verwenden. (:: text) –