Запрос в массиве JSONB базы данных Postgres

Ниже JSON является одним из столбцов типа JSONB в моей таблице "логика", я хочу запросить, чтобы проверить, сколько строк с type: QUESTION (любая запись в conditions).

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

1 ответ

Решение

Если вы хотите проверить количество раз "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;

Используйте запрос, который вы считаете подходящим для вас

демонстрация

Другие вопросы по тегам