ukázka krok za krokem: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
- Rozbalte prvky JSON každý do jednoho řádku. Tím se vygenerují dva sloupce:jeden pro klíč a jeden pro hodnotu (pole JSON)
- Rozbalte pole JSON do jednoho řádku (který odděluje agregovaný objekt JSON, ze kterého chcete odstranit
c
prvek) - Můžete použít
-
operátor k odstranění prvku. - Chcete-li znovu agregovat původní objekt JSON, musíte jej seskupit zpětně.
jsonb_agg()
znovu agreguje pole - Nakonec musíte znovu sestavit původní objekt JSON pomocí
jsonb_object_agg()
pomocí dříve vygenerovaného klíčového sloupce a nového sloupce pole.