在 Postgres 数据库的 JSONB 数组中查询

Query in JSONB array of Postgres database

下面JSON是我的table'logic'中类型JSONB的列之一,我想查询检查有多少行typeQUESTIONconditions 内的任何条目)。

{
  "name": null,
  "conditions": [
    {
      "type": "QUESTION",
      "question": {
      }
    },
    {
      "type": "QUESTION",
      "question": {
      }
    },
    {
      "type": "FIELD",
      "question": {
      }
    }
  ],
  "expression": "A"
}

如果要检查 "type": "QUESTION" 条目在 jsonb 列的 conditions 中出现的次数 table。

select count(*) FROM logic CROSS JOIN LATERAL
 jsonb_array_elements(jsonb_col->'conditions')as j(typ) 
WHERE j->>'type'  = 'QUESTION'

如果您想检查 "type": "QUESTION" 条目在每行 conditions 中出现的次数。

select jsonb_col,count(*) FROM logic CROSS JOIN LATERAL
 jsonb_array_elements(jsonb_col->'conditions')as j(typ) 
WHERE j->>'type'  = 'QUESTION'
group by jsonb_col

如果你想检查有多少行至少有一个符合条件的条目 'type' = 'QUESTION',

select count(*) FROM
(
 select DISTINCT jsonb_col FROM logic CROSS JOIN LATERAL
 jsonb_array_elements(jsonb_col->'conditions')as j(typ) 
WHERE j->>'type'  = 'QUESTION'
)s;

使用您认为适合您的查询

Demo