Oracle SUM返回false摘要,其中包含从SELECT UNION返回的相同值

时间:2014-04-22 11:26:07

标签: sql database oracle sum

我遇到了SUM声明的问题。

此查询返回MY_ID = 1QTY = 7

select my_id, sum(qty) qty
from
(     
  select 1 my_id ,2 qty from dual
union
  select 1 my_id, 5 qty from dual
)
group by my_id;

但是这个会返回MY_ID = 1QTY = 5而不是QTY = 10

select my_id, sum(qty) qty
from
(     
  select 1 my_id ,5 qty from dual
union
  select 1 my_id, 5 qty from dual
)
group by my_id;

如果两个值相同,如何汇总两个数量?

3 个答案:

答案 0 :(得分:2)

尝试使用union all: 以下作品:

select my_id, sum(qty) qty
from
(     
  select 1 my_id ,5 qty from dual
union all
  select 1 my_id, 5 qty from dual
)
group by my_id;

这是因为5 union 5总是5.如果你联合所有它包括所有东西,无论它是否相同!

答案 1 :(得分:2)

使用union all:

select my_id, sum(qty) qty
from
(     
  select 1 my_id ,5 qty from dual
union all
  select 1 my_id, 5 qty from dual
)
group by my_id;

答案 2 :(得分:1)

在第二个查询中,union中的两行是相同的。

UNION有两种形式:UNION ALL和UNION DISTINCT。哪一个是默认值会有所不同,但看起来您正在获得UNION DISTINCT,因为两个(1,5)行相同只返回其中一个。将其更改为:

select my_id, sum(qty) qty
from
(     
  select 1 my_id ,5 qty from dual
union ALL
  select 1 my_id, 5 qty from dual
)
group by my_id;

这应该给你你想要的东西:(1,10)。

编辑:简单地说我在查询中有联合DISTINCT,这是错误的!现在纠正了......