问题:从SUM查询中获得不同的结果

时间:2011-09-07 07:44:01

标签: sql oracle

当我运行以下查询时:

select SUM(t1.total_amount) as one, SUM(t2.total_amount) as two
from table1 t1, table2 t2;

我得到了这些结果:

ONE     TWO
2000    3000

但是当我运行这个查询时:

select SUM(t1.total_amount) as one table1 t1;

我得到了这个结果:

ONE
50

看起来第一个查询的结果不正确。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:4)

这样做时:

select * from table1 t1, table2 t2

你实际上是交叉连接两个表,产生一个笛卡尔积(t1中的每一行都与t2中的每一行组合)。

您可能错过了JOIN条件:

select sum(t1.total_amount), sum(t2.total_amount)
from t1 join t2 on t1.[???] = t2.[???]

编辑:

根据您的评论,您似乎想要这两个单独查询的联合     从t1中选择't1',sum(total_amount)     联盟     从t2

中选择't2',sum(total_amount)

这将显示两行而不是列的总和,但这是AFAIK最简单的方法。

答案 1 :(得分:0)

嗯,在写这个问题之前,你有没有谷歌寻求答案? 谷歌“+ oracle +组合表”立即给出了一个很好的答案: Oracle/SQL - Combining counts from 'unrelated' unrelated tables

由于您表明该表不相关,只是具有相似的数据, UNION可能是更好的解决方案。 但是,按照前面问题的方法,您可以选择部分结果,然后将它们与愿意捐赠的“从双重选择”(非)背景中合并。

示例:

select COUNT(*), SUM(X) from SOME_TABLE;

COUNT(*)     SUM(X)
----------   ----------
57           6450

select COUNT(*), SUM(X) from OTHER_TABLE;

COUNT(*)     SUM(X)
----------   ----------
315          15165

select ( select SUM(X) from SOME_TABLE) as ONE,
       ( select SUM(X) from OTHER_TABLE) as TWO from dual;

ONE        TWO
---------- ----------
6450       15165