Postgresql
聚合 json 欄位
我有一個包含 JSON 數據的表。在帶有
GROUP BY
子句的查詢中,我想獲取結果集中所有 JSON 欄位名稱的數組。我嘗試了這樣的查詢:
SELECT array_agg(jsonb_object_keys(data)) FROM table GROUP BY some_id WHERE some_id = 3
對於像這樣的輸入數據
some_id | data --------|--------------- 3 | {"foo": "bar"} 4 | {"baz": 3} 3 | {"bar": 4}
我想收到:
array_agg -------------- {'foo', 'bar'}
但它返回一個錯誤:
ERROR: set-valued function called in context that cannot accept a set
似乎我需要以某種方式將返回
setof text
的內容轉換為但我不知道如何。jsonb_object_keys``array
錯誤消息告訴您不能使用
SELECT
列表中返回的集合。您需要將其放入FROM
子句中:SELECT array_agg(t.k) FROM table tbl, jsonb_object_keys(tbl.data) as t(k) WHERE tbl.some_id = 3 GROUP BY tbl.some_id;