demonstracja krok po kroku:db<>skrzypce
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
- Rozwiń każdy z elementów JSON o jeden wiersz. To generuje dwie kolumny:jedną dla klucza i jedną dla wartości (tablica JSON)
- Rozwiń tablicę JSON o jeden wiersz (co oddziela zagregowany obiekt JSON, z którego chcesz usunąć
c
element) - Możesz użyć
-
operatora, aby usunąć element. - Aby ponownie zagregować oryginalny obiekt JSON, musisz go zgrupować wstecz.
jsonb_agg()
ponownie agreguje tablice - Na koniec musisz odbudować oryginalny obiekt JSON za pomocą
jsonb_object_agg()
używając poprzednio wygenerowanej kolumny klucza i nowej kolumny tablicy.