MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

MariaDB JSON_OBJECTAGG() Objaśnienie

W MariaDB, JSON_OBJECTAGG() to wbudowana funkcja, która zwraca obiekt JSON zawierający pary klucz-wartość na podstawie jego dwóch argumentów.

Składnia

Składnia wygląda tak:

JSON_OBJECTAGG(key, value)

Funkcja przyjmuje jako argumenty dwa wyrażenia, których wynikiem jest pojedyncza wartość lub dwie nazwy kolumn. Pierwszym argumentem jest klucz, a drugim jego wartość.

Przykład

Oto prosty przykład do zademonstrowania:

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

Wynik:

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

Chociaż ten przykład pokazuje, jak działa funkcja, prawdziwe korzyści pojawiają się podczas pracy z kolumnami lub innymi wyrażeniami.

Poniżej znajdują się przykłady, które używają kolumn bazy danych jako argumentów.

Przykład bazy danych

Załóżmy, że wysyłamy zapytanie do tabeli:

SELECT 
    PetName,
    DOB
FROM Pets;

I uzyskaj następujący zestaw wyników:

+---------+------------+
| PetName | DOB        |
+---------+------------+
| Fluffy  | 2020-11-20 |
| Fetch   | 2019-08-16 |
| Scratch | 2018-10-01 |
| Wag     | 2020-03-15 |
| Tweet   | 2020-11-28 |
| Fluffy  | 2020-09-17 |
| Bark    | NULL       |
| Meow    | NULL       |
+---------+------------+

Uruchommy teraz zapytanie, które przekazuje każdą kolumnę do JSON_OBJECTAGG() funkcja, dzięki czemu wyniki są zwracane jako obiekt JSON:

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

Wynik:

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

Wszystko, co zrobiliśmy, to przekazanie nazw kolumn do JSON_OBJECTAGG() funkcjonować.

Użyliśmy również WHERE klauzula, aby nieco zawęzić wyniki.

Zgrupowane wyniki

Możemy użyć SQL GROUP BY klauzula do tworzenia obiektów JSON na podstawie grupowania innej kolumny.

Załóżmy, że dodajemy kolumnę do naszego oryginalnego zapytania:

SELECT 
    PetTypeId,
    PetName,
    DOB
FROM Pets;

Wynik:

+-----------+---------+------------+
| PetTypeId | PetName | DOB        |
+-----------+---------+------------+
|         2 | Fluffy  | 2020-11-20 |
|         3 | Fetch   | 2019-08-16 |
|         2 | Scratch | 2018-10-01 |
|         3 | Wag     | 2020-03-15 |
|         1 | Tweet   | 2020-11-28 |
|         3 | Fluffy  | 2020-09-17 |
|         3 | Bark    | NULL       |
|         2 | Meow    | NULL       |
+-----------+---------+------------+

Teraz mamy PetTypeId kolumna oraz PetName i DOB kolumny. To dopasowuje typ zwierzaka do każdego zwierzaka.

Oto przykład użycia GROUP BY klauzula grupująca nasze wyniki według PetTypeId kolumna podczas korzystania z JSON_OBJECTAGG() funkcja:

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

Wynik:

+-----------+--------------------------------------------------------------------------------+
| PetTypeId | JSON_OBJECTAGG(PetName, DOB)                                                   |
+-----------+--------------------------------------------------------------------------------+
|         1 | {"Tweet":"2020-11-28"}                                                         |
|         2 | {"Fluffy":"2020-11-20", "Scratch":"2018-10-01", "Meow":null}                   |
|         3 | {"Fetch":"2019-08-16", "Wag":"2020-03-15", "Fluffy":"2020-09-17", "Bark":null} |
+-----------+--------------------------------------------------------------------------------+

To pozwoliło nam stworzyć osobny obiekt JSON dla każdego typu zwierzaka.

Poniższe zapytanie używa INNER JOIN na innym stole, aby zwrócić rzeczywisty typ zwierzaka, a nie tylko identyfikator.

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

Wynik:

+---------+---------+------------+
| PetType | PetName | DOB        |
+---------+---------+------------+
| Bird    | Tweet   | 2020-11-28 |
| Cat     | Scratch | 2018-10-01 |
| Cat     | Fluffy  | 2020-11-20 |
| Cat     | Meow    | NULL       |
| Dog     | Wag     | 2020-03-15 |
| Dog     | Fetch   | 2019-08-16 |
| Dog     | Bark    | NULL       |
| Dog     | Fluffy  | 2020-09-17 |
+---------+---------+------------+

Widzimy, że rzeczywisty typ zwierzaka jest teraz wymieniony w pierwszej kolumnie, a nie tylko identyfikator typu zwierzaka.

Teraz użyjmy JSON_OBJECTAGG() funkcja:

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;

Wynik:

+---------+--------------------------------------------------------------------------------+
| PetType | JSON_OBJECTAGG(p.PetName, p.DOB)                                               |
+---------+--------------------------------------------------------------------------------+
| Bird    | {"Tweet":"2020-11-28"}                                                         |
| Cat     | {"Scratch":"2018-10-01", "Fluffy":"2020-11-20", "Meow":null}                   |
| Dog     | {"Wag":"2020-03-15", "Fetch":"2019-08-16", "Bark":null, "Fluffy":"2020-09-17"} |
+---------+--------------------------------------------------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa MINUTE() w MariaDB

  2. Jak działa DATEDIFF() w MariaDB

  3. Jak uzyskać krótką nazwę dnia z daty w MariaDB?

  4. Jak wykonywać i zarządzać kopiami zapasowymi MySQL dla Oracle DBA

  5. Zasoby kopii zapasowych baz danych MySQL i MariaDB