在匹配列上联接两个SQL表

时间:2020-03-30 09:25:37

标签: postgresql

我有两个sql表,

表_1 如下:

datestamp       items

2020-01-01      1
2020-01-01      33
2020-01-01      245
2020-01-01      55
2020-01-01      534
2020-01-01      35
2020-01-01      35
2020-01-02      10
2020-01-02      100
2020-01-02      50
2020-01-02      10
2020-01-02      1
2020-01-02      166
2020-01-02      76
2020-01-02      67

表_2 如下所示:

datestamp       items_2

2020-01-01      346
2020-01-01      3623
2020-01-02      63
2020-01-02      73

我想要实现的是:

  • 两个表均按日期戳分组
  • 加入带有日期戳的表
  • 创建另一个将为items的列-items_2
  • 将其全部作为视图

我尝试过的事情:

select datestamp, SUM(items) from table_1 group by datestamp

select datestamp, SUM(items_2) from table_2 group by datestamp

它返回预期的结果(数字是虚拟的):

2020-01-01  132
2020-01-02  432
2020-01-03  353


2020-01-01  563
2020-01-02  236
2020-01-03  364

当我尝试加入表格时:

select table_1.datestamp, table_1.SUM(items), table_2.SUM(items_2)
from table_1
left join table_2
on table_1.datestamp = table_2.datestamp

我得到:

无效的操作:模式“ table_1”不存在

我正在寻找的输出看起来像这样(数字是虚拟的):

datestamp       items_1_sum     items_2_sum     difference

2020-01-01      346             525             items_2_sum-items_1_sum
2020-01-02      3623            352             63  
2020-01-03      63              52              -36
2020-01-04      73              52              -352

我的错误在哪里,有没有更好的方法来实现所需的输出?

1 个答案:

答案 0 :(得分:1)

您的求和函数应用错误,因此应使用分组依据:

select a.datestamp, sum(a.total), sum(b.total)
from (select datestamp, sum(items) as toatl
      from table_1
      group by datestamp) a
    join (select datestamp, sum(items_2) as total
      from table_2
      group by datestamp) b on a.datestamp = b.datestamp
group by a.datestamp

编辑 我回答得太快了,我的错误,这样做会更好

2020-01-01      1       346
2020-01-01      33      346
2020-01-01      245     346
2020-01-01      55      346
2020-01-01      534     346
2020-01-01      35      346
2020-01-01      35      346
2020-01-01      1       3623
2020-01-01      33      3623
2020-01-01      245     3623
2020-01-01      55      3623
2020-01-01      534     3623
2020-01-01      35      3623
2020-01-01      35      3623

我的第一个查询是错误的,因为它将结果相乘。当您进行加入时,您将得到下一个结果(日期为2020-01-01):

{{1}}

因此,第一个表中的值乘以2,第二个表中的值乘以7