bản trình diễn từng bước: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
- Mở rộng mỗi phần tử JSON thành một hàng. Điều này tạo ra hai cột:Một cho khóa và một cho giá trị (mảng JSON)
- Mở rộng mảng JSON thành một hàng mỗi hàng (phân tách đối tượng JSON tổng hợp mà bạn muốn xóa
c
phần tử) - Bạn có thể sử dụng
-
toán tử để xóa phần tử. - Để phân loại lại đối tượng JSON ban đầu, bạn cần phải nhóm nó lại.
jsonb_agg()
phân chia lại các mảng - Cuối cùng, bạn cần xây dựng lại đối tượng JSON ban đầu bằng
jsonb_object_agg()
bằng cách sử dụng cột khóa đã tạo trước đó và cột mảng mới.