从jsonb_each查询处理记录类型

时间:2015-05-14 23:10:10

标签: postgresql jsonb

我将一些数据存储为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)

类型为RECORD。

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

我想做聚合和GROUPBY,但我无法弄清楚如何提取第一个元素(字符串)和第二个元素(值)。

1 个答案:

答案 0 :(得分:3)

以下是我找到的解决方法:JSON - >行 - > JSON - > (字符串,整数)然后聚合。但我想知道是否有快捷方式并跳过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;