SQL聚合函数返回连接表上的膨胀值

时间:2015-03-09 04:45:01

标签: sql sql-server

我在这里弄错了我错的地方。 以下查询:

SELECT SUM(table1.col1) FROM table1

返回值 x

以下查询:

SELECT SUM(table1.col1) FROM table2 RIGHT OUTER JOIN table1 ON table2.ID = table1.ID

返回值 y 。 (我需要加入table2的其他数据)。为什么第二个示例返回的值与第一个不同?

2 个答案:

答案 0 :(得分:3)

通过暂时忽略RIGHT OUTER JOIN的存在,让自己,支持代码的同事以及客户的生活变得更轻松。使用Table1作为“from table”而不是table2。

然后,如果聚合,您通常会发现在加入之前必须这样做,以便数字准确。 e.g。

SELECT T1.SUMCOL1 
FROM (
      SELECT id, SUM(col1) as SUMCOL1 FROM Table1 GROUP BY id
     ) T1
LEFT OUTER JOIN table2 T2 on T1.id = T2.ID

答案 1 :(得分:1)

明显的答案是因为table2table1来说很多。也就是说,table2中有一个table1中的一个ID有多行。如果table1中不存在id,您也可能会从table2中删除行。

比较:

SELECT COUNT(*) FROM table1

要:

SELECT COUNT(*) FROM table2 RIGHT OUTER JOIN table1 ON table2.ID = table1.ID

如果您得到的结果不同,则会汇总重复项或从table1中删除行。

如果你想避免这种情况,你需要使用子查询。