2016-08-23 34 views
4

我有PostgreSQL的1维JSONB这样的:如何获得值的总和上JSONB列

SELECT '{"a": 1, "b": 2, "c": 3}'::jsonb; 

如何获得值的总和上JSONB列? 像1 + 2 + 3的总和?

的PostgreSQL有jsonb_object_keys功能,但我一直在寻找类似“jsonb_object_values”(我知道,这个功能不存在)

# select jsonb_object_keys('{"a": 1, "b": 2, "c": 3}'::jsonb); 
jsonb_object_keys 
------------------- 
a 
b 
c 
(3 rows) 

回答

3

jsonb_each_text()功能扩展一组JSON的对象转换成行格式为(key, value)。由于它返回一组行,因此应将其用作行源。由于它以text格式返回数据,因此在进一步处理之前应将其转换为适当的类型。

SELECT sum(v::integer) 
FROM jsonb_each_text('{"a": 1, "b": 2, "c": 3}'::jsonb) j(k,v);