23.01.2025 02:46
Использую PGSQL.
Есть 2 поля в таблице One(jsonb), Two(jsonb)

каждое поле всегда состоят из 3 jsonb элементов
SQL код:
Пример:
One: [{'А': 10, 'B': 5},{'C': 6},{'D': 1}]
Two: [{'A_1': 'A_2', 'A_3': 'A_4'}, {'B_1': 'B_2'}, {'D_1': 'D_2'}] 
Для поля One нужно посчитать сумму всех элементах во всех 3 jsonb для примера выше
сумма будет 10+5+6+1=22.

Для поля Two нужно посчитать количество всех ключей во всех 3 json для примера выше
количество будет 4.

Написал такой запрос

SQL код:
select 
    (
        select sum(v::int) from jsonb_each("One"[0] || "One"[1] || "One"[2]) AS x(k, v)
        where  jsonb_typeof(v) = 'number'  
    ) as "sum_jsonb",
    (
        select count(*) from jsonb_object_keys("Two"[0] || "Two"[1] || "Two"[2]) 
    ) as "count_jsonb"
from T 
Проблема возникла, что запрос не выполняется на PGSQL 10 и ниже, в нем нельзя обращаться к jsonb по индексу "One"[0].
Просьба помочь, как проще написать данный запрос, чтобы можно было выполнить на старой версии PGSQL
Часовой пояс GMT +3, время: 06:42.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.