私は、以下のデータサンプルのようなものを含む洞察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
私は、このような最初のSELECT
にSUM (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 - >「の値」+ obj2.value - > 'の値 – mjwatts