如果我的表设置如下:
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"
您如何查询所有amounts
(不仅仅是0个索引项)的总和?
运行Rails 5& Postgres 9.5.4。
注意:这篇文章类似于How do I query using fields inside the new PostgreSQL JSON datatype? - 但我正在寻找一种迭代每个数组元素的方法来总结它们(而不是直接通过它们调用它们)索引号)。
更新... 感谢@klin在下面的回答,我能够把Rails版本放在一起,这个版本给了我总计:
Indicator.joins("cross join lateral jsonb_array_elements(funding)").sum("(value->>'amount')::float")
答案 0 :(得分:4)
select sum((value->>'amount')::float)
from indicators
cross join lateral jsonb_array_elements(funding)