假设我们有一个PostgreSQL数据库,其中的表具有以下类型的行:
id | doc
---+-----------------
1 | JSON Object
2 | JSON Object
3 | JSON Object
...
JSON具有以下结构:
{
'header' : {
'info' : 'foo'},
'data' :
[{'a' : 1, 'b' : 123},
{'a' : 2, 'b' : 234},
{'a' : 1, 'b' : 543},
...
{'a' : 1, 'b' : 123},
{'a' : 4, 'b' : 452}]
}
在表的所有行中对“数据”中的“ a”和“ b”具有任意值。
第一个问题:如何查询具有以下条件的表中的行:
列表/数组中有一个字典,键为“数据”,其中a == i和b> j。
例如对于i = 1和j = 400,上面的示例将满足条件,并将返回相应的列。
第二个问题: 在我的问题中,我必须处理Json中的时间序列数据。每次测量都由一个Json表示,因此表中的一行。我想确定发生某些事件的度量。对于上述结构在查询方面不适合的情况:这样的时间序列看起来如何更易于查询?
非常感谢!
答案 0 :(得分:1)
我相信这样的查询可以回答您的第一个问题:
select distinct id, doc from ( select id, doc, jsonb_array_elements(doc->'data') as elem from docs ) as docelem where (elem->>'a')::int = 4 and (elem->>'b')::int > 400
db <>提琴here