有一个表大概2000万数据,表名mid_item_prd_201003, 现我对此表进行sum 分组,形成另外一个临时表mid_201003_tmp1
结果发现 两个表数据对不去来了,求高手解决 oracle 版本 
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bi
create table mid_201003_tmp1   as 
select prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,
pay_id,area_id,sum(money) money
from mid_item_prd_201003
group by 
prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,pay_id,area_id;select sum(money)  from  mid_201003_tmp1 ;  --11734536460select sum(money)  from  mid_item_prd_201003 ;    --11731516135

解决方案 »

  1.   

    在你创建临时表mid_201003_tmp1后
    你原表的数据有没有被改变或者删除?
      

  2.   

    只要表数据不变,sum的结果应该是相同的。
      

  3.   

    看下临时表的表结构中money字段的定义和原始表是否相符
      

  4.   

    都一样,没有小数的,表所有数据不动。
    我查了一下资料,说是oracle的sum分组后会产生差异。属于oracle的bug ,等高人来指导
      

  5.   

    都一样,没有小数的,表所有数据不动。
    我查了一下资料,说是oracle的sum分组后会产生差异。属于oracle的bug ,等高人来指导
    =================
    如果真有这种这么低级而且致命的BUG,那谁还用啊
      

  6.   

    select prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,
    pay_id,area_id,sum(money) money
    from mid_item_prd_201003
    group by  
    prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,pay_id,area_id;你再这个外层再嵌套SUM计算下得到的是什么数值,然后和建立临时表的数据比较下
      

  7.   

    不一样,
    select sum(money) from (
    select prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,
    pay_id,area_id,sum(money) money
    from mid_item_prd_201003
    group by   
    prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,pay_id,area_id)   和 select sum(money)  from mid_item_prd_201003 数据不一样
      

  8.   

    那就是啊,那是你的SQL语句写的有问题造成统计数据的差异了
    不是临时表的问题
      

  9.   

    我的意思是 
    select sum(money) from (
    select prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,
    pay_id,area_id,sum(money) money
    from mid_item_prd_201003
    group by   
    prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,pay_id,area_id)   和 select sum(money) from mid_item_prd_201003 数据不一样也就是说同一个表 mid_item_prd_201003  直接查询 和 分组后再查询 数据就不一样了
      

  10.   

    经过测试 没有问题 好像楼主的sql也没有问题 
    楼主解决了说明下
      

  11.   

    可能是bug:4604970
    设置取消hash group by试试
    alter system set "_gby_hash_aggregation_enabled" = false ;
      

  12.   

    老兵居然真的找到了bug,不知道数据多了真的会有bug,持续观望
      

  13.   


    不错。http://dbaspot.com/forums/oracle-server/146809-10g-have-group-bug.html
      

  14.   

    这个隐含参数也与
    9i group by后默认排序
    10g group by使用hash连结聚集后不排序
    改变有关
      

  15.   

    会不会prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,pay_id,area_id;其中之一是null值
    导致group失败?
      

  16.   

    多谢老兵新手,代码艺术 ,的确是这个bug,由于是生产库,无法评估修改参数后的影响,我已经和dba申请修改参数了,目前临时解决方法是加个 order by 就行了
    在执行创建语句时候
    create table mid_201003_tmp1 as  
    select prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,
    pay_id,area_id,sum(money) money
    from mid_item_prd_201003
    group by  
    prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,pay_id,area_id
    order by prd_id ;