在JSONB字段上聚合值

时间:2017-03-02 11:53:27

标签: postgresql

我正在尝试对我的表执行特定查询到jsonb字段但是无法将最终输出作为int。 假设每行作为具有下面格式的JSONB字段,我想获得每个产品的订单总数。

{ 
    "Product A": {
        "orders": {"total": 2, "stuff": 3} 
        "..."
    },
    { 
    "Product B": {
        "orders": {"total": 1, "stuff": 1} 
        "..."
    },
    { 
    "Product C": {
        "orders": {"total": 5, "stuff": 0} 
        "..."
    }
}

我已经完成了查询:

select key as product, value::json->'orders'->'total' as total
from table, jsonb_each_text(json_field)
group by key, value;

通过这个我能够获得总产品:

product      | total
Product A    | 10
Product B    | 15
Product C    | 0

然而,似乎总数是一个jsonb字段,我试图使用(value :: json->'orders' - >'total'):: numeric但是它表示无法进行强制转换。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

我终于能够做到了:

转换为数字之前需要转换为文字,如:

(value::json->'orders'->'total')::text::numeric