我将一些数据存储为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,但我无法弄清楚如何提取第一个元素(字符串)和第二个元素(值)。
答案 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;