我有一个Postgres数据库,表中有jsonb
格式的列tags
。我正在尝试查询confidence >= 50
所在的行。
我不确定如何索引到预测列表中以检查置信度。我试过下面的查询,该查询执行无错误,但不返回任何行。
select * from mytable where (tags->>'confidence')::int >= 50;
这是示例行jsonb
{
"predictions": [
{
"label": "Shopping",
"confidence": 91
},
{
"label": "Entertainment",
"confidence": 4
},
{
"label": "Events",
"confidence": 2
}
]
}
答案 0 :(得分:2)
您需要通过取消嵌套数组来规范化数据,然后可以
select p.d
from mytable mt
cross join lateral jsonb_array_elements(mt.tags -> 'predictions') as p(d)
where (p.d ->> 'confidence')::int >= 50;
对于以上示例数据,返回:
{"label": "Shopping", "confidence": 91}