stapsgewijze demo: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
- Breid de JSON-elementen uit tot elk één rij. Dit genereert twee kolommen:een voor de sleutel en een voor de waarde (de JSON-array)
- Breid de JSON-array uit in elk één rij (die het geaggregeerde JSON-object scheidt waaruit u de
c
wilt verwijderen element)
- U kunt de
-
. gebruiken operator om het element te verwijderen.
- Als u het oorspronkelijke JSON-object opnieuw wilt samenvoegen, moet u het achterstevoren groeperen.
jsonb_agg()
aggregeert de arrays opnieuw
- Ten slotte moet je het originele JSON-object opnieuw opbouwen met
jsonb_object_agg()
met behulp van de eerder gegenereerde sleutelkolom en de nieuwe matrixkolom.