Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JSON_OBJECTAGG() – Erstellen Sie ein JSON-Objekt aus Abfrageergebnissen in MySQL

MySQL enthält eine Aggregatfunktion namens JSON_OBJECTAGG() . Mit dieser Funktion können Sie ein JSON-Objekt erstellen, das Schlüssel-Wert-Paare enthält. Genauer gesagt können Sie dieses JSON-Objekt basierend auf den Ergebnissen einer Abfrage erstellen.

Es akzeptiert zwei Argumente, von denen das erste als Schlüssel und das zweite als Wert verwendet wird. Diese Argumente können Spaltennamen oder Ausdrücke sein.

Syntax

Die Syntax lautet wie folgt:

JSON_OBJECTAGG(Schlüssel, Wert)

Wobei key ist die Spalte oder der Ausdruck, der den Schlüssel darstellt des Schlüssel/Wert-Paares und value ist die Spalte oder der Ausdruck, der den Wert darstellt des Schlüssel/Wert-Paares.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

Hier ist eine häufige Abfrage, die wir ohne ausführen könnten das JSON_OBJECTAGG() Funktion:

SELECT District AS 'State', Name AS 'City', PopulationFROM CityWHERE CountryCode ='AUS'ORDER BY State;

Ergebnis:

+------------+---------------+------------ +| Zustand | Stadt | Bevölkerung |+------------+---------------+------------+ | Hauptstadtregion | Canberra | 322723 || Neusüdwales | Sydney | 3276207 || Neusüdwales | Neuburg | 270324 || Neusüdwales | Zentrale Küste | 227657 || Neusüdwales | Wollongong | 219761 || Queensland | Brisbane | 1291117 || Queensland | Goldküste | 311932 || Queensland | Stadtville | 109914 || Queensland | Steinhaufen | 92273 || Südaustralien | Adelheid | 978100 || Tasmanien | Hobart | 126118 || Viktoria | Melbourne | 2865329 || Viktoria | Geelong | 125382 || Westaustralien | Perth | 1096829 |+------------+---------------+------------+

Diese Abfrage können wir so anpassen, dass Name Spalte (in diesem Beispiel haben wir dieser Spalte einen Alias ​​von City gegeben ) wird zu einem Schlüssel und die Population Spalte wird zu einem Wert.

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_OBJECTAGG(Name, Population) AS 'City/Population'FROM CityWHERE CountryCode ='AUS'GROUP BY State;

Ergebnis:

+------------+------------------------------------ -------------------------------------------------- -----------+| Zustand | Stadt/Einwohnerzahl |+----------------+----------------------------------- -------------------------------------------------- -------------+| Hauptstadtregion | {"Canberra":322723} || Neusüdwales | {"Sydney":3276207, "Newcastle":270324, "Wollongong":219761, "Central Coast":227657} || Queensland | {"Cairns":92273, "Brisbane":1291117, "Gold Coast":311932, "Townsville":109914} || Südaustralien | {"Adelaide":978100} || Tasmanien | {"Hobart":126118} || Viktoria | {"Geelong":125382, "Melbourne":2865329} || Westaustralien | {"Perth":1096829} |+------------+----------------------- -------------------------------------------------- ----------------+

In diesem Fall haben wir die Städte nach ihrem Bundesland/Bezirk gruppiert. Wenn wir jedoch nur ein großes JSON-Objekt haben möchten, das alle Städte/Bevölkerungen für dieses Land enthält, können wir das Bundesland/den Bezirk (und das zugehörige GROUP BY) entfernen -Klausel) vollständig aus der Abfrage entfernt.

SELECT JSON_OBJECTAGG(Name, Population) AS 'City/Population'FROM CityWHERE CountryCode ='AUS';

Ergebnis:

+---------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------------------+| Stadt/Einwohnerzahl |+--------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------+| {"Perth":1096829, "Cairns":92273, "Hobart":126118, "Sydney":3276207, "Geelong":125382, "Adelaide":978100, "Brisbane":1291117, "Canberra":322723, " Melbourne":2865329, "Newcastle":270324, "Gold Coast":311932, "Townsville":109914, "Wollongong":219761, "Central Coast":227657} |+----------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------------+

Siehe auch JSON_ARRAYAGG() Funktion, mit der Sie Ihre Abfrageergebnisse in einem JSON-Array aggregieren können.