首页 > 解决方案 > 在 Postgres 数据库的 JSONB 数组中查询

问题描述

JSON 下面是我的表“逻辑”中 JSONB 类型的列之一,我想查询以检查有多少行type:(中的QUESTION任何条目conditions)。

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

标签: postgresqljson-query

解决方案


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

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;

使用您认为适合您的查询

演示


推荐阅读