2016-06-17 11 views
0

私はこのようになりますレコードを持っている:PostgreSQL:JSONネストされた要素の合計?

{ 
    "id": 93824701, 
    "lines": [ 
    {"number": 1, "unit_price": 9.77}, 
    {"number": 2, "unit_price": 8.36} 
    ] 
} 

クエリから:

select * from sales where sale @> '{"id": 93824701}'::jsonb; 

私は(SQLで)すべてunit_pricesの要素の合計を計算するにはどうすればよい、結果はなるようにします18.13ですか?

+1

http://blog.2ndquadrant.com/postgresql-anti-patterns-unnecessary-jsonhstore-dynamic-columns/ –

答えて

0

JSONはSQLの一部ではなく、PostgreSQLはいくつかのおいしいボーナスを提供しています。構造化データをJSON構造の代わりにプレーン表に格納すると、将来的に多くの問題を回避できます。質問に答える

は、この小さな例が役立つことを願っています:

select sum((value->'unit_price')::text::numeric) from jsonb_array_elements('{ 
    "id": 93824701, 
    "lines": [ 
    {"number": 1, "unit_price": 9.77}, 
    {"number": 2, "unit_price": 8.36} 
    ] 
}'::jsonb->'lines'); 

幸運。

+0

'sum((値 - > 'unit_price'):: real' – Patrick

+0

@パトリック'' - ''は教育上の目的のためだけに型キャストされていますが、 ''実際にはよく知られている計算問題が発生する可能性があります。 – Abelisto

関連する問題