Ich habe eine Tabelle mit drei Spalten: id
, name
und position
. Ich möchte ein JSON-Array wie folgt erstellen:Wie können Sie eine Projektion mit array_agg (order by) machen?
[
{"id": 443, "name": "first"},
{"id": 645, "name": "second"}
]
Dies wird durch die position
Spalte aufgeführt werden sollte.
begann ich mit der folgenden Abfrage:
with output as
(
select id, name
from the_table
)
select array_to_json(array_agg(output))
from output
Dies funktioniert, groß. Jetzt möchte ich die Reihenfolge hinzufügen. Ich begann mit diesem:
with output as
(
select id, name, position
from the_table
)
select array_to_json(array_agg(output order by output.position))
from output
Jetzt ist die Ausgabe wie folgt:
[
{"id": 443, "name": "first", "position": 1},
{"id": 645, "name": "second", "position": 2}
]
Aber ich will nicht das position
Feld in der Ausgabe.
Ich bin mit einem Henne-Ei-Problem konfrontiert: Ich brauche die position
Spalte in der Lage zu bestellen, aber ich will auch nicht die position
Spalte, wie ich es nicht in der Ergebnisausgabe wollen.
Wie kann ich das beheben?
Ich glaube nicht, dass die folgende Abfrage richtig ist, wie die Reihenfolge der Tabellen (theoretisch) nicht zwischen Anfragen erhalten:
with output as
(
select id, name
from the_table
order by position
)
select array_to_json(array_agg(output))
from output
verwendet das ist schön, danke. Kann die Projektion auch nur mit einer SQL-Abfrage durchgeführt werden und anschließend 'json_agg' anwenden? –
@CarolineKwerts 'mit t (x, y) als (Werte (1,1), (2,2)) json_agg (t) aus t auswählen;'? – Abelisto
danke :) smarte Lösung –