在PostgreSQL中选择查询> = jsonb列值

时间:2018-07-13 22:17:37

标签: sql json postgresql postgresql-9.5

我有一个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
        }
    ]
}

1 个答案:

答案 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}

在线示例:http://rextester.com/CBIAR76462