计算 JSONB 数组字段中所有项的总和

6
如果我的表格设置如下:
indicators:
  id: 56789,
  funding (JSONB): [
    {
      amount: 345678
    },
    {
      amount: 7899
    }
  ]

我可以成功地对每个记录的第一个金额求和:

Rails - Indicator.sum("(funding->0->>'amount')::float")

SQL - SELECT SUM((funding->0->>'amount')::float) FROM "indicators"

如果要查询所有金额(而不仅仅是0索引项)的总和,您该如何查询?

运行Rails 5和Postgres 9.5.4。

注意:本帖类似于如何使用新的PostgreSQL JSON数据类型中的字段进行查询?-但我正在寻找一种迭代每个数组元素并对它们求和的方法(而不是直接按索引号调用它们)。

更新... 得益于@klin下面的答案,我能够编写出给我聚合总数的Rails版本:

Indicator.joins("cross join lateral jsonb_array_elements(funding)").sum("(value->>'amount')::float")
1个回答

7
使用 jsonb_array_elements() 函数。
select sum((value->>'amount')::float)
from indicators
cross join lateral jsonb_array_elements(funding)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接