Unter den vielen MySQL-Aggregatfunktionen befindet sich eine namens JSON_ARRAYAGG()
. Mit dieser Funktion können Sie eine Ergebnismenge als einzelnes JSON-Array aggregieren. Jede Zeile der Ergebnismenge endet als einzelnes Element im Array.
Die Reihenfolge der Elemente im Array ist undefiniert.
Syntax
Die Syntax lautet wie folgt:
JSON_ARRAYAGG(col_or_expr)
Wobei col_or_expr
ist eine Spalte oder ein Ausdruck, der zu einem einzelnen Wert ausgewertet wird.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
Hier ist eine allgemeine Abfrage, die wir möglicherweise ohne JSON_ARRAYAGG()
ausführen Funktion:
SELECT District AS 'State', Name AS 'City'FROM CityWHERE CountryCode ='AUS'ORDER BY State;
Ergebnis:
+-----------------+---------------+| Zustand | Stadt |+----------------+---------------+| Hauptstadtregion | Canberra || Neusüdwales | Sydney || Neusüdwales | Newcastle || Neusüdwales | Zentrale Küste || Neusüdwales | Wollongong || Queensland | Brisbane || Queensland | Goldküste || Queensland | Townsville || Queensland | Steinhaufen || Südaustralien | Adelheid || Tasmanien | Hobart || Viktoria | Melbourne || Viktoria | Geelong || Westaustralien | Perth |+----------------+---------------+
Wir können diese Abfrage so anpassen, dass jede Stadt ein Element in einem Array wird. Dazu übergeben wir einfach den Name
Spalte (der Name der Stadt) zu JSON_ARRAYAGG()
Funktion.
Wir verwenden auch ein GROUP BY
-Klausel, um die Ergebnisse nach dem District
zu gruppieren Spalte (in diesem Fall haben wir einen Alias für diese Spalte namens State
erstellt ).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities'FROM CityWHERE CountryCode ='AUS'GROUP BY State;
Ergebnis:
Siehe auch JSON_OBJECTAGG()
Funktion, mit der Sie ein JSON-Objekt aus einer Abfrage erstellen können.