Mysql
 sql >> Database >  >> RDS >> Mysql

JSON_ARRAYAGG() – Crea un array JSON dalle righe di una query in MySQL

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.