Могу ли я суммировать массив jsonb в Postgresql с динамическими ключами в операторе выбора?

У меня есть объект jsonb в postgres:

[{"a": 1, "b":5}, {"a":2, "c":3}]

Я хотел бы получить совокупную сумму для каждого уникального ключа:

{"a":3, "b":5, "c":3}

Клавиши непредсказуемы.

Можно ли сделать это в Postgres с помощью оператора select?


person Quinma    schedule 28.11.2018    source источник


Ответы (1)


Запрос:

SELECT key, SUM(value::INTEGER)
FROM (
  SELECT (JSONB_EACH_TEXT(j)).*
  FROM JSONB_ARRAY_ELEMENTS('[{"a": 1, "b":5}, {"a":2, "c":3}]') j
) j
GROUP BY key
ORDER BY key;

Полученные результаты:

| key | sum |
| --- | --- |
| a   | 3   |
| b   | 5   |
| c   | 3   |

Скрипт БД

person 404    schedule 28.11.2018