DROP TABLE IF EXISTS test_table; CREATE TABLE test_table (id serial, info jsonb); -- One level nesting INSERT INTO test_table (info) SELECT jsonb_build_object( substr('abcd', trunc(random()*4)::integer + 1, 1), random(), substr('efgh', trunc(random()*4)::integer + 1, 1), random() ) FROM generate_series(1, 2*1000*1000); SELECT jsonb_deep_sum(info) from test_table; --- Time: 3705,791 ms -- https://stackoverflow.com/questions/35129205/postgresql-how-to-sum-all-attributes-in-a-jsonb-field/44471497#44471497 SELECT json_object_agg(key, val) FROM ( SELECT key, SUM(value::NUMERIC) val FROM test_table t, jsonb_each_text(info) GROUP BY key ) s; ---- Time: 11083,089 ms -- Two levels nesting DROP TABLE IF EXISTS test_table; CREATE TABLE test_table (id serial, info jsonb); INSERT INTO test_table (info) SELECT jsonb_build_object( substr('abcd', trunc(random()*4)::integer + 1, 1), jsonb_build_object('a', random(), 'b', random(), 'c', random()), substr('efgh', trunc(random()*4)::integer + 1, 1), jsonb_build_object('a', random(), 'b', random(), 'c', random()) ) FROM generate_series(1, 2*1000*1000); SELECT jsonb_deep_sum(info) from test_table; -- Time: 12014,711 ms