Summary: in this tutorial, you will learn how to use the MySQL JSON_ARRAYAGG()
function to aggregate values into a JSON array.
Introduction to MySQL JSON_ARRAYAGG() function
The JSON_ARRAYAGG()
function is used to aggregate values into a JSON array.
Here’s the syntax of the JSON_ARRAYAGG()
function:
JSON_ARRAYAGG(value)
Code language: SQL (Structured Query Language) (sql)
In this syntax:
value
: This value can be an expression or a column whose values you want to aggregate into a JSON array.
The JSON_ARRAYAGG()
function returns a JSON array whose elements consist of the values. The order of elements in the resulting array is undefined.
If the column has no rows, the JSON_ARRAYAGG()
function returns NULL
. If the value is NULL
, the function returns an array that contains null elements.
In practice, you often use the JSON_ARRAYAGG()
function with the GROUP BY clause to create JSON arrays for each group of rows based on a column or a set of columns.
MySQL JSON_ARRAYAGG() function example
We’ll use the employees
and customers
tables from the sample database for the demonstration:
The following query retrieves data from the customers
and employees
tables, and uses the CONCAT_WS()
and JSON_ARRAYAGG()
functions to generate a result set that includes a list of sales employees and the customer numbers associated with each of them.
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;
Code language: SQL (Structured Query Language) (sql)
Output:
+------------------+----------------------------------------------------+
| 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)
Code language: SQL (Structured Query Language) (sql)
Here’s a step-by-step explanation of the query:
CONCAT_WS(' ', firstName, lastName) salesEmployee
: This uses the CONCAT_WS() function to combine the values in thefirstName
andlastName
columns from thecustomers
table, separated by a space. It creates a new column calledsalesEmployee
that contains the full name of the sales employees.JSON_ARRAYAGG(customerNumber) customerNumbers
: This uses theJSON_ARRAYAGG()
function to aggregate the values in thecustomerNumber
column from thecustomers
table into a JSON array. Each sales employee’s list of customer numbers is stored in a column calledcustomerNumbers
.FROM customers c INNER JOIN employees e ON c.salesRepEmployeeNumber = e.employeeNumber
: This clause specifies the tables involved in the query and sets up an inner join between thecustomers
table (aliased as'c'
) and theemployees
table (aliased as'e'
). The join is based on thesalesRepEmployeeNumber
column in thecustomers
table and theemployeeNumber
column in theemployees
table.GROUP BY salesRepEmployeeNumber
: This GROUP BY clause groups the results by thesalesRepEmployeeNumber
from thecustomers
table. This means that the aggregation functions will group data for each unique sales representative.ORDER BY salesEmployee
: This ORDER BY clause sorts the results by thesalesEmployee
column, which contains the full name of the sales employee.
In short, the query retrieves a list of sales employees and, for each sales employee, aggregates the customer numbers associated with them into a JSON array. The result set includes one row for each sales employee, with their full name and a JSON array of customer numbers they are responsible for. The result set is sorted alphabetically by the sales employee’s full name.
Summary
- Use the
JSON_ARRAYAGG()
function to aggregate values into a JSON array.