PostgreSQL 11:具有json_object_agg()的多个键值对
使用PostgreSQL 11,聚合函数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
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())
。非常感谢。