MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

MariaDB JSON_OBJECTAGG() erklärt

In MariaDB JSON_OBJECTAGG() ist eine integrierte Funktion, die basierend auf ihren beiden Argumenten ein JSON-Objekt zurückgibt, das Schlüssel-Wert-Paare enthält.

Syntax

Die Syntax lautet wie folgt:

JSON_OBJECTAGG(key, value) 

Die Funktion akzeptiert zwei Ausdrücke, die einen einzelnen Wert ergeben, oder zwei Spaltennamen als Argumente. Das erste Argument ist der Schlüssel und das zweite sein Wert.

Beispiel

Hier ist ein einfaches Beispiel zur Veranschaulichung:

SELECT JSON_OBJECTAGG("name", "Homer"); 

Ergebnis:

+---------------------------------+| JSON_OBJECTAGG("Name", "Homer") |+----------------------------------------------+| {"name":"Homer"} |+---------------------------------+

Obwohl dieses Beispiel zeigt, wie die Funktion funktioniert, kommt der wirkliche Vorteil beim Arbeiten mit Spalten oder anderen Ausdrücken zum Tragen.

Nachfolgend finden Sie Beispiele, die Datenbankspalten für die Argumente verwenden.

Ein Datenbankbeispiel

Angenommen, wir fragen eine Tabelle ab:

SELECT 
    PetName,
    DOB
FROM Pets; 

Und erhalten Sie die folgende Ergebnismenge:

+---------+------------+| Haustiername | Geburtsdatum |+---------+------------+| Flauschig | 2020-11-20 || Holen | 2019-08-16 || Kratzer | 01.10.2018 || Wackeln | 2020-03-15 || Twittern | 2020-11-28 || Flauschig | 2020-09-17 || Rinde | NULL || Miau | NULL |+---------+------------+

Lassen Sie uns nun eine Abfrage ausführen, die jede Spalte an JSON_OBJECTAGG() übergibt Funktion, sodass die Ergebnisse als JSON-Objekt zurückgegeben werden:

SELECT JSON_OBJECTAGG(PetName, DOB)
FROM Pets
WHERE DOB < '2020-04-01'; 

Ergebnis:

+---------------------------------------------- ----------------------+| JSON_OBJECTAGG(Haustiername, Geburtsdatum) |+------------------------------------------ --------------------------+| {"Fetch":"2019-08-16", "Scratch":"2018-10-01", "Wag":"2020-03-15"} |+----------- -------------------------------------------------- -------+

Wir haben lediglich die Spaltennamen an JSON_OBJECTAGG() übergeben Funktion.

Wir haben auch ein WHERE verwendet -Klausel, um die Ergebnisse etwas einzugrenzen.

Gruppierte Ergebnisse

Wir können den SQL GROUP BY verwenden -Klausel, um JSON-Objekte basierend auf einer Gruppierung einer anderen Spalte zu erstellen.

Angenommen, wir fügen unserer ursprünglichen Abfrage eine Spalte hinzu:

SELECT 
    PetTypeId,
    PetName,
    DOB
FROM Pets; 

Ergebnis:

+-----------+---------+------------+| PetTypeId | Haustiername | Geburtsdatum |+-----------+---------+------------+| 2 | Flauschig | 2020-11-20 || 3 | Holen | 2019-08-16 || 2 | Kratzer | 01.10.2018 || 3 | Wackeln | 2020-03-15 || 1 | Twittern | 2020-11-28 || 3 | Flauschig | 2020-09-17 || 3 | Rinde | NULL || 2 | Miau | NULL |+-----------+---------+------------+

Jetzt haben wir eine PetTypeId sowie der PetName und DOB Säulen. Dies ordnet jedem Haustier einen Haustiertyp zu.

Hier ist ein Beispiel für die Verwendung von GROUP BY -Klausel, um unsere Ergebnisse nach PetTypeId zu gruppieren -Spalte, während Sie JSON_OBJECTAGG() verwenden Funktion:

SELECT 
    PetTypeId,
    JSON_OBJECTAGG(PetName, DOB)
FROM Pets
GROUP BY PetTypeId; 

Ergebnis:

+---+---------------------------------- ----------------------------------------------+| PetTypeId | JSON_OBJECTAGG(Tiername, Geburtsdatum) |+-----------+------------------------------ -------------------------------------------------- +| 1 | {"Tweet":"2020-11-28"} || 2 | {"Fluffy":"20.11.2020", "Scratch":"2018.10.01", "Miau":null} || 3 | {"Fetch":"2019-08-16", "Wag":"2020-03-15", "Fluffy":"2020-09-17", "Bark":null} |+----- ------+--------------------------------------------------- -------------------------------------+

Dadurch konnten wir für jeden Haustiertyp ein separates JSON-Objekt erstellen.

Die folgende Abfrage verwendet einen INNER JOIN in einer anderen Tabelle, um den tatsächlichen Tiertyp zurückzugeben, nicht nur die ID.

SELECT 
    pt.PetType,
    p.PetName,
    p.DOB
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
ORDER BY PetType; 

Ergebnis:

+---------+---------+------------+| Haustiertyp | Haustiername | Geburtsdatum |+---------+---------+------------+| Vogel | Twittern | 2020-11-28 || Katze | Kratzer | 01.10.2018 || Katze | Flauschig | 2020-11-20 || Katze | Miau | NULL || Hund | Wackeln | 2020-03-15 || Hund | Holen | 2019-08-16 || Hund | Rinde | NULL || Hund | Flauschig | 2020-09-17 |+---------+---------+------------+

Wir können sehen, dass der tatsächliche Pet-Typ jetzt in der ersten Spalte aufgeführt ist, anstatt nur die Pet-Typ-ID.

Lassen Sie uns nun JSON_OBJECTAGG() verwenden Funktion:

SELECT 
    pt.PetType,
    JSON_OBJECTAGG(p.PetName, p.DOB)
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
GROUP BY pt.PetType; 

Ergebnis:

+---------+------------------------------------ --------------------------------------------+| Haustiertyp | JSON_OBJECTAGG(p.PetName, p.DOB) |+---------+----------------------- -------------------------------------------------- --+| Vogel | {"Tweet":"2020-11-28"} || Katze | {"Scratch":"2018-10-01", "Fluffy":"2020-11-20", "Miau":null} || Hund | {"Wag":"2020-03-15", "Fetch":"2019-08-16", "Bark":null, "Fluffy":"2020-09-17"} |+----- ----+--------------------------------------------- -----------------------------------+