За последние 24 часа нас посетили 42608 программистов и 7128 роботов. Сейчас ищут 1435 программистов ...

Подсчитать сумму элементов jsonb

Тема в разделе "PostgreSQL", создана пользователем polin11, 23 янв 2025.

Метки:
  1. polin11

    polin11 Активный пользователь

    С нами с:
    22 янв 2019
    Сообщения:
    21
    Симпатии:
    0
    Использую PGSQL.
    Есть 2 поля в таблице One(jsonb), Two(jsonb)

    каждое поле всегда состоят из 3 jsonb элементов

    Код (Text):
    1. Пример:
    2. One: [{'А': 10, 'B': 5},{'C': 6},{'D': 1}]
    3. 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.

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

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