sql >> Base de Datos >  >> RDS >> Mysql

JSON_ARRAYAGG():cree una matriz JSON a partir de las filas de una consulta en MySQL

Entre las muchas funciones agregadas de MySQL se encuentra una llamada JSON_ARRAYAGG() . Esta función le permite agregar un conjunto de resultados como una sola matriz JSON. Cada fila del conjunto de resultados termina como un solo elemento en la matriz.

El orden de los elementos en la matriz no está definido.

Sintaxis

La sintaxis es así:

JSON_ARRAYAGG(col_or_expr)

Donde col_or_expr es una columna o una expresión que se evalúa como un solo valor.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

Aquí hay una consulta común que podríamos ejecutar sin el JSON_ARRAYAGG() función:

SELECT 
  District AS 'State',
  Name AS 'City'
FROM City
WHERE CountryCode = 'AUS'
ORDER BY State;

Resultado:

+-----------------+---------------+
| 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         |
+-----------------+---------------+

Podemos ajustar esa consulta para que cada ciudad se convierta en un elemento de una matriz. Para ello, simplemente pasamos el Name columna (el nombre de la ciudad) al JSON_ARRAYAGG() función.

También usamos un GROUP BY cláusula para agrupar los resultados por el District columna (en este caso, hemos creado un alias para esta columna llamado State ).

SELECT 
  District AS 'State',
  JSON_ARRAYAGG(Name) AS 'Cities'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY State;

Resultado:

+-----------------+--------------------------------------------------------+
| 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"]                                              |
+-----------------+--------------------------------------------------------+

Consulte también JSON_OBJECTAGG() función que le permite crear un objeto JSON a partir de una consulta.