Heim >Datenbank >MySQL-Tutorial >Wie extrahiere ich bestimmte Spalten als JSON-Objektarray in PostgreSQL?
Extrahieren Sie bestimmte Spalten aus einer PostgreSQL-Tabelle als Array von JSON-Objekten
Frage:
Sie haben eine Tabelle mit mehreren Spalten und möchten für jede Zeile ein Array von Objekten zurückgeben, wobei zwei Spalten entsprechend einer anderen Spalte gruppiert sind. Sie werden jedoch auf das Problem stoßen, dass das Ergebnis in jedem Objekt einen zusätzlichen Schlüssel enthält. Die gewünschte Ausgabe ist ein Array von Objekten mit nur zwei Spalten, gruppiert durch eine dritte Spalte.
PostgreSQL 10-Lösung:
Für PostgreSQL 10 und höher können Sie den -
-Operator verwenden, um einen einzelnen Schlüssel (oder ein Array von Schlüsseln in PostgreSQL 10) vor dem Aggregieren aus einem jsonb
-Objekt zu entfernen.
<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb(t.*) - '{id, val2}'::text[]) AS js_34 FROM tbl t GROUP BY val2;</code>
PostgreSQL 9.4-Lösung:
In PostgreSQL 9.4 und höher können Sie jsonb_build_object()
oder json_build_object()
verwenden, um ein JSON-Objekt aus abwechselnden Schlüsseln und Werten zu erstellen.
<code class="language-sql">SELECT val2, jsonb_agg(jsonb_build_object('val3', val3, 'val4', val4)) AS js_34 FROM tbl GROUP BY val2;</code>
PostgreSQL 9.3-Lösung:
Für PostgreSQL 9.3 und höher können Sie to_jsonb()
- und ROW-Ausdrücke verwenden, um JSON-Objekte zu erstellen. Sie können anstelle von ROW-Ausdrücken auch Unterabfragen verwenden.
<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb((val3, val4))) AS js_34 FROM tbl GROUP BY val2; SELECT val2, jsonb_agg(to_jsonb((SELECT t FROM (SELECT val3, val4) t))) AS js_34 FROM tbl GROUP BY val2;</code>
Die obige Lösung liefert das gewünschte Ergebnis: ein Array von Objekten mit nur zwei Spalten, gruppiert durch die dritte Spalte.
Das obige ist der detaillierte Inhalt vonWie extrahiere ich bestimmte Spalten als JSON-Objektarray in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!