MySQL - JSON_OBJECTAGG() 函数



MySQL 的JSON_OBJECTAGG()函数接受表中两列的名称作为参数,并返回一个 JSON 对象字面量作为结果,该字面量具有第一个参数的实体作为键,第二个参数的实体作为值。

JSON 对象字面量以键值对的形式存储,并用花括号 {} 括起来。键必须是字符串,值必须是有效的 JSON 数据类型:字符串、数字、对象、数组、布尔值、NULL。每个键值对之间用逗号分隔。

如果指定的列没有行,则此函数返回NULL

语法

以下是 MySQL JSON_OBJECTAGG() 函数的语法:

JSON_OBJECTAGG(key, value);

参数

此方法接受两个参数。具体说明如下:

  • key: 其不同值将用作结果 JSON 对象中键的表达式。

  • value: 其值将与结果 JSON 对象中相应的键关联的表达式。

返回值

此函数将键值对聚合到 JSON 对象中。

示例

以下示例演示了此函数的用法。假设我们使用 CREATE 语句创建了一个名为CUSTOMERS的表,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下查询将 7 条记录插入到上面创建的表中:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

要验证是否插入了记录,请执行以下查询:

Select * From CUSTOMERS;

以下是 CUSTOMERS 表:

ID 姓名 (NAME) 年龄 (AGE) 地址 (ADDRESS) 薪水 (SALARY)
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

以下查询使用客户姓名作为键,他们的薪水作为值,创建一个具有键值对的单个 JSON 对象:

SELECT JSON_OBJECTAGG(NAME, SALARY) as Salaries from CUSTOMERS;

这将产生以下结果:

薪水 (Salaries)
{ "Komal": 4500.00, "Muffy": 10000.00, "Hardik": 8500.00, "Khilan": 1500.00,
"Ramesh": 2000.00, "Kaushik": 2000.00, "Chaitali": 6500.00 }

以下查询根据 AGE 对客户的薪水进行分组:

SELECT AGE, JSON_OBJECTAGG(NAME, SALARY) as Salaries 
FROM CUSTOMERS 
GROUP BY AGE;

这将产生以下结果:

年龄 (AGE) 薪水 (Salaries)
22 {"Komal": 4500.00}
23 {"Kaushik": 2000.00}
24 {"Muffy": 10000.00}
25 {"Khilan": 1500.00, "Chaitali": 6500.00}
27 {"Hardik": 8500.00}
32 {"Ramesh": 2000.00}
广告