如果我的表格设置如下:
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")