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

MariaDB JSON_ARRAYAGG() Objaśnienie

W MariaDB, JSON_ARRAYAGG() to wbudowana funkcja, która zwraca tablicę JSON zawierającą element dla każdej wartości w danym zestawie wartości JSON lub SQL.

Funkcja działa na kolumnie lub wyrażeniu, którego wynikiem jest pojedyncza wartość. Umożliwia agregowanie zestawu wyników jako pojedynczej tablicy JSON. Każdy wiersz zestawu wyników kończy się jako pojedynczy element w tablicy.

Składnia

Składnia wygląda tak:

JSON_ARRAYAGG([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [LIMIT {[offset,] row_count | row_count OFFSET offset}])

Przykład

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

SELECT PetName
FROM Pets;

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

+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+

Wynikiem jest jedna kolumna, a każdy wiersz zawiera inne imię zwierzaka.

Załóżmy, że chcieliśmy, aby wszystkie zwierzaki były wymienione w tablicy JSON (tak, aby każda nazwa zwierzaka była osobnym elementem tablicy).

Możemy użyć JSON_ARRAYAGG() funkcja właśnie to robi:

SELECT JSON_ARRAYAGG(PetName)
FROM Pets;

Wynik:

+-------------------------------------------------------------------+
| JSON_ARRAYAGG(PetName)                                            |
+-------------------------------------------------------------------+
| ["Fluffy","Fetch","Scratch","Wag","Tweet","Fluffy","Bark","Meow"] |
+-------------------------------------------------------------------+

Wszystko, co zrobiliśmy, to przekazanie nazwy kolumny do JSON_ARRAYAGG() funkcjonować.

Wyraźne wyniki

Możemy dodać DISTINCT klauzula usuwająca zduplikowane wartości z tablicy:

SELECT JSON_ARRAYAGG(DISTINCT PetName)
FROM Pets;

Wynik:

+----------------------------------------------------------+
| JSON_ARRAYAGG(DISTINCT PetName)                          |
+----------------------------------------------------------+
| ["Bark","Fetch","Fluffy","Meow","Scratch","Tweet","Wag"] |
+----------------------------------------------------------+

Zauważ, że Fluffy został tutaj uwzględniony tylko raz, podczas gdy Fluffy został uwzględniony dwukrotnie w poprzednim przykładzie (ponieważ są dwa zwierzaki o nazwie Fluffy ).

Uporządkuj wyniki

Możemy użyć ORDER BY klauzula określająca kolejność elementów tablicy:

SELECT JSON_ARRAYAGG(PetName ORDER BY PetName DESC)
FROM Pets;

Wynik:

+-------------------------------------------------------------------+
| JSON_ARRAYAGG(PetName ORDER BY PetName DESC)                      |
+-------------------------------------------------------------------+
| ["Wag","Tweet","Scratch","Meow","Fluffy","Fluffy","Fetch","Bark"] |
+-------------------------------------------------------------------+

Ogranicz wyniki

Możemy użyć LIMIT klauzula określająca kolejność elementów tablicy:

SELECT JSON_ARRAYAGG(PetName LIMIT 3)
FROM Pets;

Wynik:

+--------------------------------+
| JSON_ARRAYAGG(PetName LIMIT 3) |
+--------------------------------+
| ["Fluffy","Fetch","Scratch"]   |
+--------------------------------+

Możemy również użyć przesunięcia dla LIMIT klauzula:

SELECT JSON_ARRAYAGG(PetName LIMIT 3 OFFSET 2)
FROM Pets;

Wynik:

+-----------------------------------------+
| JSON_ARRAYAGG(PetName LIMIT 3 OFFSET 2) |
+-----------------------------------------+
| ["Scratch","Wag","Tweet"]               |
+-----------------------------------------+

Alternatywnie możemy pominąć LIMIT i OFFSET słowa kluczowe i zamień liczby (i oddziel je przecinkami), aby osiągnąć ten sam wynik:

SELECT JSON_ARRAYAGG(PetName LIMIT 2, 3)
FROM Pets;

Wynik:

+-----------------------------------+
| JSON_ARRAYAGG(PetName LIMIT 2, 3) |
+-----------------------------------+
| ["Scratch","Wag","Tweet"]         |
+-----------------------------------+

Zgrupowane wyniki

Możemy użyć SQL GROUP BY klauzula do tworzenia tablic na podstawie grupowania innej kolumny.

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

SELECT 
    PetTypeId,
    PetName
FROM Pets;

Wynik:

+-----------+---------+
| PetTypeId | PetName |
+-----------+---------+
|         2 | Fluffy  |
|         3 | Fetch   |
|         2 | Scratch |
|         3 | Wag     |
|         1 | Tweet   |
|         3 | Fluffy  |
|         3 | Bark    |
|         2 | Meow    |
+-----------+---------+

Teraz mamy PetTypeId kolumna oraz PetName kolumna. To dopasowuje typ zwierzaka do każdego imienia.

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

SELECT 
    PetTypeId,
    JSON_ARRAYAGG(PetName)
FROM Pets
GROUP BY PetTypeId;

Wynik:

+-----------+---------------------------------+
| PetTypeId | JSON_ARRAYAGG(PetName)          |
+-----------+---------------------------------+
|         1 | ["Tweet"]                       |
|         2 | ["Fluffy","Scratch","Meow"]     |
|         3 | ["Fetch","Wag","Fluffy","Bark"] |
+-----------+---------------------------------+

To pozwoliło nam stworzyć osobną tablicę 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
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
ORDER BY PetType;

Wynik:

+---------+---------+
| PetType | PetName |
+---------+---------+
| Bird    | Tweet   |
| Cat     | Scratch |
| Cat     | Fluffy  |
| Cat     | Meow    |
| Dog     | Wag     |
| Dog     | Fetch   |
| Dog     | Bark    |
| Dog     | Fluffy  |
+---------+---------+

Widzimy, że każdy typ zwierzaka jest wymieniony w pierwszej kolumnie, a imię zwierzaka jest wymienione w drugiej kolumnie.

Teraz użyjmy JSON_ARRAYAGG() funkcja:

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

Wynik:

+---------+--------------------------+
| PetType | JSON_ARRAYAGG(p.PetName) |
+---------+--------------------------+
| Bird    | Tweet                    |
| Cat     | Scratch,Fluffy,Meow      |
| Dog     | Wag,Fetch,Bark,Fluffy    |
+---------+--------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uwagi dotyczące szyfrowania danych w spoczynku dla MariaDB

  2. Ogłaszamy obsługę MariaDB 10.2 — ClusterControl 1.5

  3. Jak TO_CHAR() działa w MariaDB?

  4. MariaDB JSON_MERGE_PATCH() Objaśnienie

  5. Główny menedżer wysokiej dostępności (MHA) uległ awarii! Co mam teraz zrobić?