Как агрегировать JSONB PostgreSQL 10 - PullRequest
0 голосов
/ 29 мая 2018

У меня есть таблица с идентификаторами и столбцами jsonb

1, "{"a" : {"per" : 0.45, "number" : 1}}"
1, "{"b" : {"per" : 3.13, "number" : 7}}"
2, "{"a" : {"per" : 14.73, "number" : 33}}"
2, "{"b" : {"per" : 85.27, "number" : 191}}"
3, "{"a" : {"per" : 40.63, "number" : 91}}"
4, "{"a" : {"per" : 1.79, "number" : 4}}"
4, "{"b" : {"per" : 2.68, "number" : 6}}"

Нужно сгруппировать значения по идентификаторам и получить этот результат

1, "{"a" : {"per" : 0.45, "number" : 1}, "b" : {"per" : 3.13, "number" : 7}}"
2, "{"a" : {"per" : 14.73, "number" : 33}, "b" : {"per" : 85.27, "number" : 191}}"
3, "{"a" : {"per" : 40.63, "number" : 91}}"
4, "{"a" : {"per" : 1.79, "number" : 4}, "b" : {"per" : 2.68, "number" : 6}}"

Есть ли способ добиться этого?

1 Ответ

0 голосов
/ 29 мая 2018

Для этого нет встроенного агрегата, но вы можете легко создать свой собственный:

CREATE AGGREGATE jsonb_merge(jsonb) 
(
    SFUNC = jsonb_concat(jsonb, jsonb),
    STYPE = jsonb
);

Тогда вы можете сделать:

select id, jsonb_merge(the_jsonb_column) 
from your_table
group by id
...