我有一个对小数求和的 agg 函数。为简洁起见,省略了业务逻辑
CREATE OR REPLACE FUNCTION calculate_snapshot_internal_decimal(_this_value DECIMAL,
_next_value DECIMAL
OUT _code DECIMAL)
LANGUAGE plpgsql AS
$func$
BEGIN
_code = _this_value + _next_value;
END
$func$;
现在我需要同样的 JSONB,其中键是字符串,值始终是 BigDecimal
_这个值:
{"weight": "50", "height":"170", "size": "2"}
_下一个值
{"weight": "40", "height":"20"}
汇总结果:
{"weight": "90", "height":"190", "size": "2"}
我可以尝试什么?
您可以使用
jsonb_each_text()
、UNION ALL
、强制转换、求和来取消嵌套,然后使用 进行聚合jsonb_object_agg()
:称呼:
小提琴
这总结了两个输入
jsonb
文档中每个键的所有值。numeric
与( = )不兼容的值decimal
会引发异常。为此我们不需要 PL/pgSQL。普通 SQL 就可以做到。我选择了标准 SQL 变体。看:
严格来说,这不是一个“聚合函数”,问题中的示例也不是。两者都是聚合两个输入值的普通函数。