Запрос в массиве JSONB базы данных Postgres - PullRequest
0 голосов
/ 13 января 2019

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

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

1 Ответ

0 голосов
/ 13 января 2019

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

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

Демо

...