Mysql
 sql >> Base de données >  >> RDS >> Mysql

JSON_ARRAYAGG() - Créer un tableau JSON à partir des lignes d'une requête dans MySQL

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)

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.