Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL 11:具有json_object_agg()的多个键值对_Sql_Arrays_Json_Postgresql_Group By - Fatal编程技术网

PostgreSQL 11:具有json_object_agg()的多个键值对

PostgreSQL 11:具有json_object_agg()的多个键值对,sql,arrays,json,postgresql,group-by,Sql,Arrays,Json,Postgresql,Group By,使用PostgreSQL 11,聚合函数json\u object\u agg()根据键和值创建json对象,如当前正常运行时间: # SELECT json_object_agg('uptime', date_trunc('second', current_timestamp - pg_postmaster_start_time())); 这将输出JSON对象: { "uptime" : "00:45:55" } 如何将多个键值对合并到一个对象中?例如,如何向对象添加PostgreSQ

使用PostgreSQL 11,聚合函数
json\u object\u agg()
根据键和值创建json对象,如当前正常运行时间:

# SELECT json_object_agg('uptime', date_trunc('second',
  current_timestamp - pg_postmaster_start_time()));
这将输出JSON对象:

{ "uptime" : "00:45:55" }
如何将多个键值对合并到一个对象中?例如,如何向对象添加PostgreSQL版本字符串

# SELECT json_object_agg('version', version());
预期结果可能如下所示:

{
    "uptime": "00:60:01",
    "version": "PostgreSQL 11.7"
}

您可以使用
json\u build\u object()
为键/值对生成json对象

json_object_agg(
    json_build_object(
        'uptime', date_trunc('second', current_timestamp - pg_postmaster_start_time()),
        'version', version()
    )
)
json_object_agg用于聚合,即汇总任意数量的行

您可以将其用于您的目的,方法是使数据看起来像是以多行(每行有2列)的形式输入。为此,可以使用值列表

select jsonb_object_agg(key,val) from (
values 
    ('uptime',date_trunc('second', current_timestamp - pg_postmaster_start_time())::text),
    ('version',version())
) foo(key,val);

使用带有4个参数和一个隐式/伪行的json(b)_build_对象可能更适合您给出的确切情况。这可能是您目前想要做的所有事情,但是如果您使用JSON,您应该知道JSON(b)\u object\u agg是如何工作的,即使它不是您现在需要的。

对于聚合查询,例如:

select point_id, json_agg(
    json_build_object(
        'lat', lat,
        'lng', lon
        ))
from raw
group by point_id;
结果:

1,"[{"lat": 66.316917131, "lng": 65.308411872}, {"lat": 66.361430767, "lng": 65.218795224}]"
2,"[{"lat": 53.557419623, "lng": 102.39525849}, {"lat": 53.626151788, "lng": 102.529763433}]"
3,"[{"lat": 56.452206128, "lng": 100.731635684}, {"lat": 56.520627931, "lng": 100.771568911}]"

以下查询有效:
选择json\u build\u object('uptime',date\u trunc('second',current\u timestamp-pg\u postmaster\u start\u time()),'version',version())
。非常感谢。