Parmi les nombreuses fonctions d'agrégation MySQL, il y en a une appelée JSON_ARRAYAGG()
. Cette fonction vous permet d'agréger un ensemble de résultats sous la forme d'un tableau JSON unique. Chaque ligne du jeu de résultats se termine par un élément unique dans le tableau.
L'ordre des éléments dans le tableau n'est pas défini.
Syntaxe
La syntaxe ressemble à ceci :
JSON_ARRAYAGG(col_or_expr)
Où col_or_expr
est une colonne ou une expression qui donne une valeur unique.
Exemple
Voici un exemple pour illustrer.
Voici une requête courante que nous pourrions exécuter sans le JSON_ARRAYAGG()
fonction :
SELECT District AS 'State', Name AS 'City' FROM City WHERE CountryCode = 'AUS' ORDER BY State;
Résultat :
+-----------------+---------------+ | 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 | +-----------------+---------------+
Nous pouvons ajuster cette requête, de sorte que chaque ville devienne un élément d'un tableau. Pour cela, on passe simplement le Name
colonne (le nom de la ville) au JSON_ARRAYAGG()
fonction.
Nous utilisons également un GROUP BY
clause pour regrouper les résultats par le District
colonne (dans ce cas, nous avons créé un alias pour cette colonne appelé State
).
SELECT District AS 'State', JSON_ARRAYAGG(Name) AS 'Cities' FROM City WHERE CountryCode = 'AUS' GROUP BY State;
Résultat :
+-----------------+--------------------------------------------------------+ | 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"] | +-----------------+--------------------------------------------------------+
Voir aussi le JSON_OBJECTAGG()
fonction qui permet de créer un objet JSON à partir d'une requête.