1

我将一些数据存储为 JSON。我想使用 jsonb_each 展平数据。新的列类型是 RECORD,但我不知道如何从中提取值。

SELECT T FROM (
  SELECT json_each_text(skills::json->'prizes') FROM users) AS T;

输出是

        jsonb_each            
---------------------------------
(compliance,2)
(incentives,3)
(compliance,0)
(legal,3)
(legal,2)
(international-contributions,3)

类型是记录。

pg_typeof 
-----------
record

我想做一个聚合和 GROUPBY,但我不知道如何提取第一个元素(字符串)和第二个元素(值)。

4

1 回答 1

3

这是我发现的一种解决方法:JSON -> ROW -> JSON -> (string, integer) 然后聚合。但我想知道是否有捷径并跳过 ROW->JSON 转换。

SELECT U.key, AVG(U.value::int) FROM
  (SELECT   row_to_json(T)->'s'->>'key' AS key,
  row_to_json(T)->'s'->>'value' AS value
  FROM
    (SELECT jsonb_each(skills::jsonb->'prizes') AS s
    FROM users) AS T
    ) AS U
GROUP BY key;
于 2015-05-14T23:32:25.617 回答