demo langkah demi langkah: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
- Perluas elemen JSON masing-masing menjadi satu baris. Ini menghasilkan dua kolom:Satu untuk kunci dan satu untuk nilai (array JSON)
- Perluas larik JSON menjadi satu baris masing-masing (yang memisahkan objek JSON gabungan dari mana Anda ingin menghapus
c
elemen) - Anda dapat menggunakan
-
operator untuk menghapus elemen. - Untuk menggabungkan kembali objek JSON asli, Anda perlu mengelompokkannya ke belakang.
jsonb_agg()
menggabungkan kembali array - Akhirnya Anda perlu membangun kembali objek JSON asli dengan
jsonb_object_agg()
menggunakan kolom kunci yang dibuat sebelumnya dan kolom larik baru.