Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчитать сумму элементов jsonb 
:(
    Опции темы
polin11
Дата 23.1.2025, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



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

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

Код

Пример:
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.

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

Код

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
PM MAIL   Вверх
LSD
Дата 23.1.2025, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

Репутация: 3
Всего: 537



Цитата(polin11 @  23.1.2025,  03:34 Найти цитируемый пост)
в нем нельзя обращаться к jsonb по индексу "One"[0]

Но можно обращаться через 
Код

"One"->0




--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Akina
Дата 26.1.2025, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Цитата(polin11 @  23.1.2025,  03:34 Найти цитируемый пост)
Пример:

Пример правильнее давать в виде готового к употреблению CREATE TABLE + INSERT INTO.
Ещё правильнее - в виде готового fiddle.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LSD
Дата 27.1.2025, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

Репутация: 3
Всего: 537



А как правильно давать непрошенные советы?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Akina
Дата 28.1.2025, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Правильно - игнорировать сообщения, которые тебе не нравятся.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LSD
Дата 28.1.2025, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15717
Регистрация: 24.3.2004
Где: Dublin

Репутация: 3
Всего: 537



Akina, можешь улучшить ответ - делай. А советы кому-как надо отвечать оставь при себе.

Заодно можешь последовать своему же совету:
Цитата(Akina @  28.1.2025,  10:13 Найти цитируемый пост)
игнорировать сообщения, которые тебе не нравятся




--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Akina
Дата 28.1.2025, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Цитата(LSD @  28.1.2025,  14:16 Найти цитируемый пост)
А советы кому-как надо отвечать оставь при себе.

Ну если всё же прочитать то, что мной написано, то выяснится, что совет был не тому, кто отвечает, а тому, кто спрашивает. Это к слову. 
А если бы автор сразу оформил вопрос с приведением SQL-скриптов для воссоздания таблицы, то он мог бы получить сразу готовый и пригодный к использованию ответ, к тому же проверенный практически на его же структуре и данных. Я уж не говорю о том, что одиночные кавычки в JSON вызовут у PostgreSQL приступ негодования...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0633 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.