Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

JSON_ARRAYAGG() – Crie uma matriz JSON a partir das linhas de uma consulta no MySQL


Entre as muitas funções agregadas do MySQL está uma chamada JSON_ARRAYAGG() . Essa função permite agregar um conjunto de resultados como uma única matriz JSON. Cada linha do conjunto de resultados termina como um único elemento na matriz.

A ordem dos elementos na matriz é indefinida.


Sintaxe


A sintaxe fica assim:
JSON_ARRAYAGG(col_or_expr)

Onde col_or_expr é uma coluna ou uma expressão que resulta em um único valor.

Exemplo


Aqui está um exemplo para demonstrar.

Aqui está uma consulta comum que podemos executar sem o JSON_ARRAYAGG() função:
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 essa consulta, para que cada cidade se torne um elemento em uma matriz. Para fazer isso, simplesmente passamos o Name coluna (o nome da cidade) para o JSON_ARRAYAGG() função.

Também usamos um GROUP BY cláusula para agrupar os resultados pelo District coluna (neste caso, criamos um alias para esta coluna chamado 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"]                                              |
+-----------------+--------------------------------------------------------+

Veja também o JSON_OBJECTAGG() função que permite criar um objeto JSON a partir de uma consulta.