2017-03-02 16 views
0

私のテーブルでjsonbフィールドに特定のクエリを実行しようとしていますが、最終出力をintとして取得するのに問題があります。 以下の形式のJSONBフィールドとして各行を想定し、各製品の注文総数を取得したいと考えています。これによりJSONBフィールドの値の集約

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フィールドであるようだが、私は、クエリをやった

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

私は(value :: json - > 'orders' - > 'total'):: numericを使用しようとしましたが、キャストはできません。あなたは助けてもらえますか?

私は最終的にそれを行うことができました
+1

あなたは 'jsonb_each(json_field)'と '値使用する必要があります - > 'の順序' を - >>合計。あなたは数値にキャストできます(しかし、そのフィールドが本当にどこでもJSON番号である場合のみ)。 – pozs

+0

クール。ありがとうございました。 – absg

答えて

0

:数値等に変換する前にテキストに変換するために必要な

を:

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

また、 '(value :: json - > 'orders' - >> 'total'):: numeric' –

関連する問題