Blandt de mange MySQL-samlede funktioner er en kaldet JSON_ARRAYAGG()
. Denne funktion giver dig mulighed for at aggregere et resultatsæt som et enkelt JSON-array. Hver række i resultatsættet ender som et enkelt element i arrayet.
Rækkefølgen af elementerne i arrayet er udefineret.
Syntaks
Syntaksen ser sådan ud:
JSON_ARRAYAGG(col_or_expr)
Hvor col_or_expr
er en kolonne eller et udtryk, der evalueres til en enkelt værdi.
Eksempel
Her er et eksempel til at demonstrere.
Her er en almindelig forespørgsel, vi muligvis kører uden JSON_ARRAYAGG()
funktion:
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Resultat:
+-----------------+---------------+ | 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 | +-----------------+---------------+
Vi kan justere den forespørgsel, så hver by bliver et element i et array. For at gøre dette sender vi blot Name
kolonne (navnet på byen) til JSON_ARRAYAGG()
funktion.
Vi bruger også en GROUP BY
klausul for at gruppere resultaterne efter District
kolonne (i dette tilfælde har vi oprettet et alias for denne kolonne kaldet State
).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Resultat:
+-----------------+--------------------------------------------------------+ | 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"] | +-----------------+--------------------------------------------------------+
Se også JSON_OBJECTAGG()
funktion, som giver dig mulighed for at oprette et JSON-objekt ud fra en forespørgsel.