Schritt-für-Schritt-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
- Erweitern Sie die JSON-Elemente in jeweils eine Zeile. Dadurch werden zwei Spalten generiert:eine für den Schlüssel und eine für den Wert (das JSON-Array)
- Erweitern Sie das JSON-Array in jeweils eine Zeile (die das aggregierte JSON-Objekt trennt, aus dem Sie den
c
entfernen möchten Element) - Sie können den
-
verwenden Operator, um das Element zu entfernen. - Um das ursprüngliche JSON-Objekt neu zu aggregieren, müssen Sie es rückwärts gruppieren.
jsonb_agg()
aggregiert die Arrays neu - Schließlich müssen Sie das ursprüngliche JSON-Objekt mit
jsonb_object_agg()
neu erstellen unter Verwendung der zuvor generierten Schlüsselspalte und der neuen Array-Spalte.