DB2 汇总值SUM的计算

     最近在DB2 V9.5上遇到了一些汇总值的计算,发现了一个怪问题,以记录之。。

 建立临时表

create table test 
(
 id varchar(1),
 type varchar(1),
 num int
)
插入临时数据

insert into test values('1','1',20);
insert into test values('1','2',80);
insert into test values('2','2',50);

查询时

select id,sum(num),sum(case when type='1' then num else 0 end ),
sum(num)+sum(case when type='1' then num else 0 end ),
 sum(case when type='1' then num else 0 end )/sum(num),sum(num)/sum(num)
from test
group by id
结果如下


 ID     2     3     4     5         6
 -----  ----  ----  ----     ----   ---
 1      100  20    120   0    1
 2      50     0      50     0    1

可以看到,SUM值是正确的,两个值相加sum(num)+sum(case when type='1' then num else 0 end ) 也是正确的,但是在计算sum(case when type='1' then num else 0 end ) /sum(num) 却是错误的,第一个应该是0.2 第二个是0。计算sum(num)/sum(num)却是正确的。。

     原因没有想到,于是在oralce 10.2.0环境下,再做测试,以上DB2脚本在oracle环境下皆可运行。

    ORACLE 下结果却是正确的


 ID       2        3         4           5        6
 -----  ----   ----   ----       ----     ---

1 100  20      120      0.2   1
2  50    0        50        0       1

   ORACLE 和DB2 SUM 运算逻辑有啥区别呢?

   Google 下没有答案,有没有高手能探讨一下呢?










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值