JSONB_OBJECT_AGG
功能描述
JSONB_OBJECT_AGG函数是一个聚合函数,该函数用于返回一个由一组键值对组成的JSON对象。
注意事项
- 该功能仅在数据库兼容模式为PostgreSQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='PG')。
- 该函数支持的Vastbase版本:
- V2.2 Build 15 (Patch No.2)及以后补丁版本。
- V2.2 Build 16及以后版本。
语法格式
JSONB_OBJECT_AGG(key_expr,value_expr)->JSON
参数说明
key_expr
必选参数,一个用于生成JSON对象中键值对的键的列名或者表达式。
value_expr
必选参数,一个用于生成JSON对象中键值对的值的列名或者表达式。
该返回jsonb类型的对象,它包含了一个分组中由指定的列或者表达式组成的键值对。其中,key_expr的值作为键值对中的键,value_expr的值作为键值对中的值并使用[to_jsonb()]()函数转为JSON值。
示例
示例1: 入参类型为数值类型,直接调用JSONB_OBJECT_AGG函数。
select jsonb_object_agg(1,1);
--强制类型转换
select jsonb_object_agg(1.111::number,2::float4);
返回结果如下:
jsonb_object_agg
-----------------
{"1": 1}
(1 row)
jsonb_object_agg
-----------------
{"1.111": 2}
(1 row)
示例2: JSONB_OBJECT_AGG函数与表结合使用。
1、创建测试表并插入数据。
CREATE TABLE tb_1189190 (c1 int, c2 varchar(10), c3 numeric);
INSERT INTO tb_1189190 VALUES(101, 'Red', 100);
INSERT INTO tb_1189190 VALUES(102, 'Green', 200);
INSERT INTO tb_1189190 VALUES(103, 'Yellow', 300);
INSERT INTO tb_1189190 VALUES(104, 'Red', 120);
INSERT INTO tb_1189190 VALUES(105, 'Red', 100);
INSERT INTO tb_1189190 VALUES(106, 'Red', 200);
INSERT INTO tb_1189190 VALUES(101, 'Yellow', 300);
INSERT INTO tb_1189190 VALUES(102, 'Yellow', 120);
2、查询表数据。
select * from tb_1189190 order by 1,2,3;
返回结果为:
C1 | c2 | c3
-----+--------+-------
101 | Red | 100
101 | Yellow | 300
102 | Green | 200
102 | Yellow | 120
103 | Yellow | 300
104 | Red | 120
105 | Red | 100
106 | Red | 200
(8 rows )
3、调用JSONB_OBJECT_AGG函数。
select jsonb_object_agg(c1,c2) from tb_1189190;
select jsonb_object_agg(c2,c3) from tb_1189190;
select jsonb_object_agg(c1,c2) from tb_1189190 order by 1;
select 'lili',jsonb_object_agg(c1,'true')from tb_1189190 group by c1 order by 1 desc;
返回结果为:
jsonb_object_agg
-----------------------------------------------------------------------------------------
{"101": "Yellow","102": "Yellow","103": "Yellow","104": "Red","105": "Red","106": "Red"}
(1 row)
jsonb_object_agg
-------------------------------------
{"Red":200,"Green":200,"Yellow":120}
(1 row)
jsonb_object_agg
------------------------------------------------------------------------------------------
{"101":"Yellow", "102": "Yellow", "103": "Yellow", "104": "Red", "105": "Red", "106": "Red"}
(1 row)
?column? | jsonb object_agg
----------+---------------------
lili | {"103":"true"}
lili | {"105":"true"}
lili | {"106":"true"}
lili | {"101":"true"}
lili | {"102":"true"}
lili | {"104":"true"}
(6 rows )