sum()分组后与原数据产生差异

sailorsailor 2010-04-21 03:01:56
有一个表大概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 ;  --11734536460

select sum(money) from mid_item_prd_201003 ; --11731516135
...全文
292 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
sailorsailor 2010-04-22
  • 打赏
  • 举报
回复
问题解决。马上结贴
sailorsailor 2010-04-22
  • 打赏
  • 举报
回复
多谢老兵新手,代码艺术 ,的确是这个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 ;

vber1010 2010-04-21
  • 打赏
  • 举报
回复
学习!楼主按照上面的方法改了后还有问题吗?
huangdh12 2010-04-21
  • 打赏
  • 举报
回复
会不会prd_id,acct_item_id,serv_type_id,urban_id,cust_id,if_mer,pay_id,area_id;其中之一是null值
导致group失败?
tangren 2010-04-21
  • 打赏
  • 举报
回复
这个隐含参数也与
9i group by后默认排序
10g group by使用hash连结聚集后不排序
改变有关
codearts 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 tangren 的回复:]

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

不错。

http://dbaspot.com/forums/oracle-server/146809-10g-have-group-bug.html
vber1010 2010-04-21
  • 打赏
  • 举报
回复
老兵居然真的找到了bug,不知道数据多了真的会有bug,持续观望。。。
tangren 2010-04-21
  • 打赏
  • 举报
回复
可能是bug:4604970
设置取消hash group by试试
alter system set "_gby_hash_aggregation_enabled" = false ;
kingkingzhu 2010-04-21
  • 打赏
  • 举报
回复
经过测试 没有问题 好像楼主的sql也没有问题
楼主解决了说明下
playumen 2010-04-21
  • 打赏
  • 举报
回复
关注:这种BUG的可能性不大
sailorsailor 2010-04-21
  • 打赏
  • 举报
回复
我的意思是
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 直接查询 和 分组后再查询 数据就不一样了
小灰狼W 2010-04-21
  • 打赏
  • 举报
回复
我怀疑建立临时表时或之后,还有数据进入了原始表
iqlife 2010-04-21
  • 打赏
  • 举报
回复
那就是啊,那是你的SQL语句写的有问题造成统计数据的差异了
不是临时表的问题
sailorsailor 2010-04-21
  • 打赏
  • 举报
回复
不一样,
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 数据不一样
iqlife 2010-04-21
  • 打赏
  • 举报
回复
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计算下得到的是什么数值,然后和建立临时表的数据比较下
iqlife 2010-04-21
  • 打赏
  • 举报
回复
绝对不可能.....
sailorsailor 2010-04-21
  • 打赏
  • 举报
回复
的确有啊。。。。。郁闷啊 。
hebo2005 2010-04-21
  • 打赏
  • 举报
回复
都一样,没有小数的,表所有数据不动。
我查了一下资料,说是oracle的sum分组后会产生差异。属于oracle的bug ,等高人来指导
=================
如果真有这种这么低级而且致命的BUG,那谁还用啊
sailorsailor 2010-04-21
  • 打赏
  • 举报
回复
都一样,没有小数的,表所有数据不动。
我查了一下资料,说是oracle的sum分组后会产生差异。属于oracle的bug ,等高人来指导
小灰狼W 2010-04-21
  • 打赏
  • 举报
回复
看下临时表的表结构中money字段的定义和原始表是否相符
加载更多回复(4)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧