ステップバイステップのデモ: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
- JSON要素をそれぞれ1行に展開します。これにより、2つの列が生成されます。1つはキー用、もう1つは値(JSON配列)用です。
- JSON配列をそれぞれ1行に展開します(これにより、
c
を削除する集約されたJSONオブジェクトが分離されます。 要素) -
を使用できます 要素を削除する演算子。
- 元のJSONオブジェクトを再集計するには、それを逆方向にグループ化する必要があります。
jsonb_agg()
配列を再集約します
- 最後に、
jsonb_object_agg()
を使用して元のJSONオブジェクトを再構築する必要があります 以前に生成されたキー列と新しい配列列を使用します。