Wśród wielu funkcji agregujących MySQL jest jedna o nazwie JSON_ARRAYAGG()
. Ta funkcja umożliwia agregowanie zestawu wyników jako pojedynczej tablicy JSON. Każdy wiersz zestawu wyników kończy się jako pojedynczy element w tablicy.
Kolejność elementów w tablicy jest niezdefiniowana.
Składnia
Składnia wygląda tak:
JSON_ARRAYAGG(col_or_expr)
Gdzie col_or_expr
to kolumna lub wyrażenie, którego wynikiem jest pojedyncza wartość.
Przykład
Oto przykład do zademonstrowania.
Oto typowe zapytanie, które możemy uruchomić bez JSON_ARRAYAGG()
funkcja:
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Wynik:
+-----------------+---------------+ | State | City | +-----------------+---------------+ | Capital Region | Canberra | | New South Wales | Sydney | | New South Wales | Newcastle | | New South Wales | Central Coast | | New South Wales | Wollongong | | Queensland | Brisbane | | Queensland | Gold Coast | | Queensland | Townsville | | Queensland | Cairns | | South Australia | Adelaide | | Tasmania | Hobart | | Victoria | Melbourne | | Victoria | Geelong | | West Australia | Perth | +-----------------+---------------+
Możemy dostosować to zapytanie, aby każde miasto stało się elementem tablicy. Aby to zrobić, po prostu przekazujemy Name
kolumna (nazwa miasta) do JSON_ARRAYAGG()
funkcja.
Używamy również GROUP BY
klauzula grupująca wyniki według District
kolumna (w tym przypadku utworzyliśmy alias dla tej kolumny o nazwie State
).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Wynik:
+-----------------+--------------------------------------------------------+ | State | Cities | +-----------------+--------------------------------------------------------+ | Capital Region | ["Canberra"] | | New South Wales | ["Sydney", "Newcastle", "Central Coast", "Wollongong"] | | Queensland | ["Brisbane", "Gold Coast", "Townsville", "Cairns"] | | South Australia | ["Adelaide"] | | Tasmania | ["Hobart"] | | Victoria | ["Melbourne", "Geelong"] | | West Australia | ["Perth"] | +-----------------+--------------------------------------------------------+
Zobacz także JSON_OBJECTAGG()
funkcja, która umożliwia utworzenie obiektu JSON z zapytania.