2016-06-15 13 views
1

私は、以下のデータサンプルのようなものを含む洞察jsonbカラムを持つ投稿テーブルを持っています。私はの計算された合計を持ちたいPostgreSQL 9.5の2つのカラムの合計を計算します

データサンプル(Facebookのから来ているので、フォーマットを変更することはできません)

[ 
    { 
    "name": "post_story_adds_unique", 
    "values": [ 
     { "value": 93 } 
    ], 
    }, 
    { 
    "name": "post_story_adds", 
    "values": [ 
     { "value": 100 } 
    ] 
    }, 
    { 
    "name": "post_impressions_organic_unique", 
    "values": [ 
     { "value": 123 } 
    ] 
    }, 
    ... 
] 

ウイルスに到達し、それが合計で注文しました。

望ましい結果

id message      post_created   reach viral total 
69 This World Family dablah... 2016-05-11 18:44:16 6683 646  7329 
... 

私は、これまでの結果を得ることができたが、私は、2つの列の合計を取得する方法を見つけ出すことはできません。 2つの列を合計するには、別の結合を追加する場所と選択する場所がわかりません。

結果は、これまで

id message      post_created   reach viral 
69 This World Family dablah... 2016-05-11 18:44:16 6683 646 
58 blah blah flip flop blah... 2016-05-22 11:00:01 4880 403 
55 This is another message ... 2016-05-24 10:00:00 4417 109 

私は、このような最初のSELECTSUM (reach + viral) as totalを含むなど、さまざまな方法を試してみたが、ほとんど私は列が存在しないと言って、エラーを取り戻します。

相続人は私のSQL、これまで:

SELECT 
    id, 
    message, 
    post_created, 
    obj.value->'values'->0->'value' AS reach, 
    obj2.value->'values'->0->'value' AS viral 
    FROM (
    SELECT 
     id, 
     message, 
     post_created, 
     insights 
    FROM posts 
    WHERE (
     page_id = 4 AND 
     post_created >= '2016-05-01 00:00:00' AND 
     post_created <= '2016-05-31 23:59:59' AND 
     insights @> '[{"name":"post_impressions_organic_unique"}, {"name":"post_impressions_viral_unique"}]' 
    ) 
) e1 
    JOIN LATERAL jsonb_array_elements(insights) obj(value) ON obj.value->>'name' = 'post_impressions_organic_unique' 
    JOIN LATERAL jsonb_array_elements(insights) obj2(value) ON obj2.value->>'name' = 'post_impressions_viral_unique' 
    ORDER BY reach DESC; 

答えて

0

あなたがそうのようなあなたのテーブルを更新する必要があることを行うには:jsonbはどんな影響を持っていますが、追加するかどう

UPDATE yourTable SET resultsRow = firtRow + secondRow; 
+0

ありがとうございますが、私はテーブルに保存したくない場合は、クエリを実行するだけです。 >「値」 - - > 0 - >「の値」+ obj2.value - > 'の値 – mjwatts

0

わかりません2つの列の値は、使用するのと同じくらい簡単です+

create table foo(a integer,b integer); 
insert into foo values (3,4); 
select *, a+b as total from foo; 

a | b | total 
---+---+------- 
3 | 4 |  7 
(1 row) 
+0

おかげで、私はそれを試みたが、私の場合は私がコラム「リーチ」取り戻します' - > 0 - >'値 '? – mjwatts

+0

あなたは obj.valueを試してみましたが、存在しない –

+0

yep - エラーが発生しました:ERROR:演算子が存在しません:unknown + jsonb LINE 7:obj.value - > 'values' - > 0 - > 'value' + obj2.value - > 'values' - > 0 - > ... ^ ヒント:指定された名前と引数の型に一致する演算子がありません。明示的な型キャストを追加する必要があるかもしれません。 – mjwatts

関連する問題