las*_*ain 4 sql arrays postgresql json group-by
使用 PostgreSQL 11,聚合函数json_object_agg()从键和值创建一个 JSON 对象,就像当前的正常运行时间:
# SELECT json_object_agg('uptime', date_trunc('second',
current_timestamp - pg_postmaster_start_time()));
Run Code Online (Sandbox Code Playgroud)
这将输出 JSON 对象:
{ "uptime" : "00:45:55" }
Run Code Online (Sandbox Code Playgroud)
如何将多个键值对合并为一个对象?例如,如何将 PostgreSQL 版本字符串添加到对象中?
# SELECT json_object_agg('version', version());
Run Code Online (Sandbox Code Playgroud)
所需的结果可能如下所示:
{
"uptime": "00:60:01",
"version": "PostgreSQL 11.7"
}
Run Code Online (Sandbox Code Playgroud)
您可以使用json_build_object()从键/值对生成 JSON 对象。
json_object_agg(
json_build_object(
'uptime', date_trunc('second', current_timestamp - pg_postmaster_start_time()),
'version', version()
)
)
Run Code Online (Sandbox Code Playgroud)
小智 5
对于聚合查询,示例:
select point_id, json_agg(
json_build_object(
'lat', lat,
'lng', lon
))
from raw
group by point_id;
Run Code Online (Sandbox Code Playgroud)
结果:
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}]"
Run Code Online (Sandbox Code Playgroud)
json_object_agg 用于聚合,即汇总任意数量的行。
您可以将其用于您的目的,使数据看起来像是多行,每行 2 列。为此,您可以使用 VALUES 列表。
select jsonb_object_agg(key,val) from (
values
('uptime',date_trunc('second', current_timestamp - pg_postmaster_start_time())::text),
('version',version())
) foo(key,val);
Run Code Online (Sandbox Code Playgroud)
对于您给出的具体情况,使用带有 4 个参数和一个隐式/虚拟行的 json(b)_build_object 可能更自然。这可能是您目前想要做的所有事情,但如果您正在使用 JSON,您应该知道 json(b)_object_agg 是如何工作的,即使它不是您现在需要的。
| 归档时间: |
|
| 查看次数: |
4052 次 |
| 最近记录: |