Как сложить внутреннее поле jsonb в postgres? - PullRequest
0 голосов
/ 20 марта 2020

Я хочу суммировать одно поле P C значение из группы тестов таблицы по metal_id.

Я пробовал это Postgres GROUP BY на внутреннем поле jsonb но у меня не сработало, так как у меня другой JSON формат

tbl_test

id json
1  [
    {
        "pc": "4",
        "metal_id": "1"
    },
    {
        "pc": "4",
        "metal_id": "5"
    }
]

2. [
    {
        "pc": "1",
        "metal_id": "1"
    },
    {
        "pc": "1",
        "metal_id": "2"
    },       
]

вывод, который я хочу получить: (сгруппировать по metal_id и сумме p c).

Заранее спасибо !

   [
         "metal_id": 1
        {
          "pc": "5",
        }
      ]

1 Ответ

0 голосов
/ 20 марта 2020

Вы можете использовать json_array_element(), чтобы расширить массив jsonb, а затем агрегировать по металлу с идентификатором:

select obj ->> 'metal_id' metal_id, sum((obj ->> 'pc')::int) cnt
from mytable t
cross join lateral jsonb_array_elements(t.js) j(obj)
group by obj ->> 'metal_id'
order by metal_id

Демонстрация на DB Fiddle :

metal_id | cnt
:------- | --:
1        |   5
2        |   1
5        |   4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...