[英]calculate sum of two columns in PostgreSQL 9.5
我有一個帖子表,每個帖子都有一個洞察力jsonb列,其中包含類似下面的數據示例。
數據樣本(來自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
...
到目前為止,我設法得到了結果,但我無法弄清楚如何得到兩列的總和。 我不知道在哪里添加另一個連接或選擇將兩列相加。
結果到目前為止
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;
要做到這一點,你需要像這樣更新你的表:
UPDATE yourTable SET resultsRow = firtRow + secondRow;
不確定jsonb是否會產生任何影響,但是,添加兩列的值就像使用+
一樣簡單
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.