PostgreSQL将两个表SUM值与相同列组合

时间:2019-01-16 12:39:31

标签: sql postgresql sum

我的Database中有几张桌子,并且所有人都有一个column,名字相同的User。现在我要计算每个表上每个用户的活动,所以现在我计算2个表上的活动,您可以看到名称分别为Result 1Result 2

结果1:

+--------+-----------------+
| Users  | Number of Insert|
+--------+-----------------+
| Liam   |        37       |
| Jacob  |        16       |
| Ethan  |        6        |
+--------+-----------------+

结果2:

+--------+-----------------+
| Users  | Number of Insert|
+--------+-----------------+
| Liam   |        7        |
| Jacob  |        10       |
| Ethan  |        9        |
| Elijah |        12       |
| Noah   |        5        |
+--------+-----------------+

所以我想合并这个拖曳表,但是在用户列中我想删除精致的
并在Number of Insert列中我希望SUM拥有相同的用户,如果没有相同的用户,则显示无总和 例如:     以利亚,诺亚Result 1表中没有值,所以最后一个问题是我希望output像这样,但是如何?

输出:

+--------+-----------------+
| Users  | Number of Insert|
+--------+-----------------+
| Liam   |        44       |
| Jacob  |        26       |
| Ethan  |        15       |
| Elijah |        12       |
| Noah   |        5        |
+--------+-----------------+
  

注意:在结果1和结果2中,“用户”列的值大部分   时间是相同的,但并非总是如此。

2 个答案:

答案 0 :(得分:3)

完全外部联接和合并?

 select
   coalesce (r1.users, r2.users) as users,
   coalesce (r1.number_of_insert, 0) + coalesce (r2.number_of_insert, 0)
 from
   result_1 r1
   full outer join join result_2 r2 on
     r1.users = r2.users

这假设您的结果1和2数据集已经如上形成。

答案 1 :(得分:2)

如果我理解正确,则可以使用union allgroup by

select user, sum(num)
from ((select user, num
       from q1
      ) union all
      (select user, num
       from q2
      )
     ) q
group by user;