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.