демонстрация стъпка по стъпка:db<>fiddle
SELECT
jsonb_object_agg(key, a) -- 5
FROM (
SELECT
mydata,
key,
jsonb_agg(a_elems.value - 'c') as a -- 3/4
FROM
mytable,
jsonb_each(mydata) elems, -- 1
jsonb_array_elements(elems.value) AS a_elems -- 2
GROUP BY mydata, key -- 4
) s
GROUP BY mydata -- 5
- Разгънете JSON елементите в един ред всеки. Това генерира две колони:една за ключа и една за стойността (JSON масива)
- Разширете JSON масива в един ред всеки (който разделя обобщения JSON обект, от който искате да премахнете
c
елемент) - Можете да използвате
-
оператор за премахване на елемента. - За да групирате повторно оригиналния JSON обект, трябва да го групирате отзад.
jsonb_agg()
прегрупира масивите - Накрая трябва да възстановите оригиналния JSON обект с
jsonb_object_agg()
използвайки предварително генерираната ключова колона и новата колона на масива.