Onder de vele MySQL-aggregaatfuncties is er een genaamd JSON_ARRAYAGG()
. Met deze functie kunt u een resultatenset samenvoegen als één JSON-array. Elke rij van de resultatenset eindigt als een enkel element in de array.
De volgorde van de elementen in de array is niet gedefinieerd.
Syntaxis
De syntaxis gaat als volgt:
JSON_ARRAYAGG(col_or_expr)
Waar col_or_expr
is een kolom of een uitdrukking die resulteert in een enkele waarde.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
Hier is een veelvoorkomende query die we kunnen uitvoeren zonder de JSON_ARRAYAGG()
functie:
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Resultaat:
+-----------------+---------------+ | 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 | +-----------------+---------------+
We kunnen die query aanpassen, zodat elke stad een element in een array wordt. Om dit te doen, geven we gewoon de Name
. door kolom (de naam van de stad) naar de JSON_ARRAYAGG()
functie.
We gebruiken ook een GROUP BY
clausule om de resultaten te groeperen op de District
kolom (in dit geval hebben we een alias voor deze kolom gemaakt met de naam State
).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Resultaat:
+-----------------+--------------------------------------------------------+ | 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"] | +-----------------+--------------------------------------------------------+
Zie ook de JSON_OBJECTAGG()
functie waarmee u een JSON-object van een query kunt maken.