SQL:如何防止双重求和

时间:2015-07-29 21:20:10

标签: postgresql join sum

我不完全确定这个术语是什么,但是当你加入2个表时你有多对多的关系而你想总结其中一个变量时,我相信你可以总结一下价值一遍又一遍。

我想要完成的是防止这种情况发生。如何确保我的sum函数返回正确的数字?

我正在使用PostgreSQL 例如:

Table 1                 Table 2
SampleID DummyName      SampleID  DummyItem
1        John           1         5
1        John           1         4
2        Doe            1         5
3        Jake           2         3
3        Jake           2         3
                        3         2

如果我将这两个表连接到SampleID上,并且我想为每个DummyName求和DummyItem,那么如何在不进行双重求和的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

解决方案是首先聚合,然后进行连接:

select t1.sampleid, t1.dummyname, t.total_items
from table_1 t1
  join (
    select t2.sampleid, sum(dummyitem) as total_items
    from table_2 t2
    group by t2
  ) t ON t.sampleid = t1.sampleid;

但真正的问题是:为什么table_1中有重复项?

答案 1 :(得分:0)

我会后退一步,尝试评估数据库设计。具体来说,哪些规则允许这样的重复数据?

要根据您的数据解决您的具体问题,可以选择以下一个选项:创建一个包含表1中唯一行的临时表,然后将临时表与表2连接以获得我认为您期望的总和。