Heim >Datenbank >MySQL-Tutorial >Wie kann ich mehrere Spalten effizient als JSON-Array von Objekten in PostgreSQL abrufen?

Wie kann ich mehrere Spalten effizient als JSON-Array von Objekten in PostgreSQL abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-14 21:51:43543Durchsuche

How to Efficiently Retrieve Multiple Columns as a JSON Array of Objects in PostgreSQL?

PostgreSQL: Generieren von JSON-Arrays von Objekten aus mehreren Spalten

Diese Anleitung zeigt, wie Sie Zeilen in einer PostgreSQL-Tabelle effizient nach einer einzelnen Spalte gruppieren und die verbleibenden Spalten in einem JSON-Array von Objekten zusammenfassen. Betrachten wir das MyTableBeispiel:

<code>| id | value_two | value_three | value_four |
|---|---|---|---|
| 1 | a | A | AA |
| 2 | a | A2 | AA2 |
| 3 | b | A3 | AA3 |
| 4 | a | A4 | AA4 |
| 5 | b | A5 | AA5 |</code>

Das Ziel besteht darin, eine Ausgabe wie diese zu erzeugen:

<code>| value_two | value_four |
|---|---|
| a | [{"value_three":"A","value_four":"AA"}, {"value_three":"A2","value_four":"AA2"}, {"value_three":"A4","value_four":"AA4"}]
| b | [{"value_three":"A3","value_four":"AA3"}, {"value_three":"A5","value_four":"AA5"}]</code>

Beachten Sie, dass einfachere Aggregationsmethoden häufig die id- und Gruppierungsspalte (value_two) in den JSON-Objekten enthalten, was wir vermeiden möchten.

Hier sind optimierte Lösungen für verschiedene PostgreSQL-Versionen:

PostgreSQL 10 und höher:

Nutzen Sie den Operator -, um unerwünschte Schlüssel auszuschließen:

<code class="language-sql">SELECT value_two, jsonb_agg(to_jsonb(t.*) - '{id, value_two}'::text[]) AS value_four
FROM   MyTable t
GROUP  BY value_two;</code>

PostgreSQL 9.4 und höher:

Verwenden Sie jsonb_build_object() für eine präzise Kontrolle über Schlüssel-Wert-Paare:

<code class="language-sql">SELECT value_two, jsonb_agg(jsonb_build_object('value_three', value_three, 'value_four', value_four)) AS value_four
FROM   MyTable
GROUP  BY value_two;</code>

PostgreSQL 9.3 und höher:

Beschäftigen Sie to_jsonb() mit einem Zeilenausdruck:

<code class="language-sql">SELECT value_two, jsonb_agg(to_jsonb(row(value_three, value_four))) AS value_four
FROM   MyTable
GROUP  BY value_two;</code>

Diese Methoden bieten effiziente und saubere Möglichkeiten, die gewünschte JSON-Ausgabe zu generieren, unnötige Schlüssel zu vermeiden und sich an verschiedene PostgreSQL-Versionen anzupassen. Wählen Sie für eine optimale Leistung die mit Ihrer Datenbankversion kompatible Methode.

Das obige ist der detaillierte Inhalt vonWie kann ich mehrere Spalten effizient als JSON-Array von Objekten in PostgreSQL abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn