Tra le molte funzioni di aggregazione MySQL ce n'è una chiamata JSON_ARRAYAGG()
. Questa funzione consente di aggregare un set di risultati come un singolo array JSON. Ogni riga del set di risultati finisce come un singolo elemento nell'array.
L'ordine degli elementi nell'array non è definito.
Sintassi
La sintassi è questa:
JSON_ARRAYAGG(col_or_expr)
Dove col_or_expr
è una colonna o un'espressione che restituisce un singolo valore.
Esempio
Ecco un esempio da dimostrare.
Ecco una query comune che potremmo eseguire senza JSON_ARRAYAGG()
funzione:
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Risultato:
+-----------------+---------------+ | 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 | +-----------------+---------------+
Possiamo adattare quella query, in modo che ogni città diventi un elemento in una matrice. Per fare ciò, passiamo semplicemente al Name
colonna (il nome della città) al JSON_ARRAYAGG()
funzione.
Usiamo anche un GROUP BY
clausola per raggruppare i risultati per District
colonna (in questo caso, abbiamo creato un alias per questa colonna chiamato State
).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Risultato:
+-----------------+--------------------------------------------------------+ | 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"] | +-----------------+--------------------------------------------------------+
Vedi anche il JSON_OBJECTAGG()
funzione che consente di creare un oggetto JSON da una query.