Resumo : neste tutorial, você aprenderá como usar a JSON_ARRAYAGG()
função MySQL para agregar valores em um array JSON.
Introdução à função JSON_ARRAYAGG() do MySQL
A JSON_ARRAYAGG()
função é usada para agregar valores em uma matriz JSON.
Aqui está a sintaxe da JSON_ARRAYAGG()
função:
JSON_ARRAYAGG(value)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
value
: esse valor pode ser uma expressão ou uma coluna cujos valores você deseja agregar em uma matriz JSON.
A JSON_ARRAYAGG()
função retorna uma matriz JSON cujos elementos consistem em valores. A ordem dos elementos na matriz resultante é indefinida.
Se a coluna não tiver linhas, a JSON_ARRAYAGG()
função retornará NULL
. Se o valor for NULL
, a função retornará uma matriz que contém elementos nulos.
Na prática, você costuma usar a JSON_ARRAYAGG()
função com a cláusula GROUP BY para criar matrizes JSON para cada grupo de linhas com base em uma coluna ou conjunto de colunas.
Exemplo de função JSON_ARRAYAGG() do MySQL
Usaremos as tabelas employees
e customers
do banco de dados de exemplo para a demonstração:
A consulta a seguir recupera dados das tabelas customers
e e usa as funções e para gerar um conjunto de resultados que inclui uma lista de vendedores e os números de clientes associados a cada um deles.employees
CONCAT_WS()
JSON_ARRAYAGG()
SELECT
CONCAT_WS(' ', firstName, lastName) salesEmployee,
JSON_ARRAYAGG(customerNumber) customerNumbers
FROM
customers c
INNER JOIN employees e ON c.salesRepEmployeeNumber = e.employeeNumber
GROUP BY
salesRepEmployeeNumber
ORDER BY
salesEmployee;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------------------+----------------------------------------------------+
| salesEmployee | customerNumbers |
+------------------+----------------------------------------------------+
| Andy Fixter | [114, 276, 282, 333, 471] |
| Barry Jones | [121, 128, 144, 167, 189, 259, 299, 415, 448] |
| Foon Yue Tseng | [151, 168, 181, 233, 424, 455, 456] |
| George Vanauf | [131, 175, 202, 260, 319, 328, 447, 486] |
| Gerard Hernandez | [103, 119, 141, 171, 209, 242, 256] |
| Julie Firrelli | [173, 204, 320, 339, 379, 495] |
| Larry Bott | [186, 187, 201, 240, 311, 324, 334, 489] |
| Leslie Jennings | [124, 129, 161, 321, 450, 487] |
| Leslie Thompson | [112, 205, 219, 239, 347, 475] |
| Loui Bondur | [146, 172, 250, 350, 353, 406] |
| Mami Nishi | [148, 177, 211, 385, 398] |
| Martin Gerard | [216, 298, 344, 376, 458, 484] |
| Pamela Castillo | [145, 227, 249, 278, 314, 381, 382, 386, 452, 473] |
| Peter Marsh | [166, 323, 357, 412, 496] |
| Steve Patterson | [157, 198, 286, 362, 363, 462] |
+------------------+----------------------------------------------------+
15 rows in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está uma explicação passo a passo da consulta:
CONCAT_WS(' ', firstName, lastName) salesEmployee
: usa a função CONCAT_WS() para combinar os valores nas colunasfirstName
elastName
dacustomers
tabela, separados por um espaço. Ele cria uma nova coluna chamadasalesEmployee
que contém o nome completo dos vendedores.JSON_ARRAYAGG(customerNumber) customerNumbers
: usa aJSON_ARRAYAGG()
função para agregar os valores dacustomerNumber
coluna dacustomers
tabela em uma matriz JSON. A lista de números de clientes de cada vendedor é armazenada em uma coluna chamadacustomerNumbers
.FROM customers c INNER JOIN employees e ON c.salesRepEmployeeNumber = e.employeeNumber
: esta cláusula especifica as tabelas envolvidas na consulta e configura uma junção interna entre acustomers
tabela (apelidada de'c'
) e aemployees
tabela (apelidada de'e'
). A junção é baseada nasalesRepEmployeeNumber
coluna dacustomers
tabela e naemployeeNumber
coluna daemployees
tabela.GROUP BY salesRepEmployeeNumber
: Esta cláusula GROUP BY agrupa os resultados dasalesRepEmployeeNumber
tabelacustomers
. Isso significa que as funções de agregação agruparão dados para cada representante de vendas exclusivo.ORDER BY salesEmployee
: esta cláusula ORDER BY classifica os resultados pelasalesEmployee
coluna, que contém o nome completo do vendedor.
Resumindo, a consulta recupera uma lista de vendedores e, para cada vendedor, agrega os números de clientes associados a eles em uma matriz JSON. O conjunto de resultados inclui uma linha para cada vendedor, com seu nome completo e uma matriz JSON de números de clientes pelos quais eles são responsáveis. O conjunto de resultados é classificado em ordem alfabética pelo nome completo do vendedor.
Resumo
- Use a
JSON_ARRAYAGG()
função para agregar valores em uma matriz JSON.