2016-09-01 35 views
1

如果我的表被設置,如:總和都在JSONB陣列領域的項目

indicators: 
    id: 56789, 
    funding (JSONB): [ 
    { 
     amount: 345678 
    }, 
    { 
     amount: 7899 
    } 
    ] 

我可以成功地總結與每個記錄的第一含量:

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

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

如何查詢所有amounts的總和(不只是0索引項目)?

Running Rails 5 & Postgres 9.5.4。

注:這篇文章是類似於How do I query using fields inside the new PostgreSQL JSON datatype? - 但我正在尋找一種方式來遍歷每個數組元素的總結他們(而不是通過索引號直接調用它們)。

更新... 感謝以下@克林的回答,我能夠放在一起的Rails版本,使得聚集總給我:

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

回答

3

使用jsonb_array_elements()

select sum((value->>'amount')::float) 
from indicators 
cross join lateral jsonb_array_elements(funding)