Postgresql

聚合 json 欄位

  • January 16, 2020

我有一個包含 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;

引用自:https://dba.stackexchange.com/questions/198098