VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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 )