Запрос в массиве 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;
Используйте запрос, который вы считаете подходящим для вас