Função JSON_ARRAYAGG() do MySQL

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 employeese customersdo banco de dados de exemplo para a demonstração:

A consulta a seguir recupera dados das tabelas customerse 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.employeesCONCAT_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 colunas firstNamee lastNameda customerstabela, separados por um espaço. Ele cria uma nova coluna chamada salesEmployeeque contém o nome completo dos vendedores.
  • JSON_ARRAYAGG(customerNumber) customerNumbers: usa a JSON_ARRAYAGG()função para agregar os valores da customerNumbercoluna da customerstabela em uma matriz JSON. A lista de números de clientes de cada vendedor é armazenada em uma coluna chamada customerNumbers.
  • 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 a customerstabela (apelidada de 'c') e a employeestabela (apelidada de 'e'). A junção é baseada na salesRepEmployeeNumbercoluna da customerstabela e na employeeNumbercoluna da employeestabela.
  • GROUP BY salesRepEmployeeNumber: Esta cláusula GROUP BY agrupa os resultados da salesRepEmployeeNumbertabela customers. 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 pela salesEmployeecoluna, 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *