sql - 计算 PostgreSQL 9.5 中两列的总和

标签 sql postgresql

我有一个帖子表,每个帖子都有一个 insight 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 }
    ]
  },
  ...
]

我想计算reachviral 的总和,然后按总数排序。

期望的结果

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)作为总数,但大多数情况下我得到的错误是列不存在。

到目前为止,这是我的 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;

最佳答案

不确定 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)

关于sql - 计算 PostgreSQL 9.5 中两列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37840516/

相关文章:

java - 时间戳 MySQL 正在减去我约会的两个小时

php - 为什么 SQL INNER JOIN 无论条件如何都会返回所有记录

php - 如何使用 PHP 将日语文本插入到 Postgres 表中?

sql - 拆分和合并表列的值

mysql - 适用于数据库繁重、繁忙的网站/应用程序的数据库管理系统?

postgresql - 为什么 Copy 或\copy 在 Postgresql 中对我不起作用?

mysql - 计数语句不起作用

mysql - SQL菜鸟。 "Foreign Key Constraint is incorrectly formed"

node.js - 在启动快速服务器之前等待几个数据库连接?

mysql - 如何获取包含 GROUP BY 语句的 SQL 查询的计数?