ORACLE两个聚合分组和多个聚合分组结果不一致。在线求解!!!

RotKang 2010-04-28 09:18:29
CREATE TABLE TEST_AA AS
SELECT DATE'&ENDDATE' AS CLOSEDATE,
M.STARTDATE,
M.COMCODE,
M.RISKCODE,
M.BUSINESSNATURE,
SUM(M.ORIG_COUNT) AS ORIG_COUNT,
SUM(M.ORIG_PREMIUM) AS ORIG_PREMIUM,
SUM(M.ORIG_AMOUNT) AS ORIG_AMOUNT,
SUM(M.ENDO_COUNT) AS ENDO_COUNT,
SUM(M.ENDO_PREMIUM) AS ENDO_PREMIUM,
SUM(M.ENDO_AMOUNT) AS ENDO_AMOUNT,
SUM(M.CANC_COUNT) AS CANC_COUNT,
SUM(M.CANC_PREMIUM) AS CANC_PREMIUM,
SUM(M.CANC_AMOUNT) AS CANC_AMOUNT,
SUM(M.EXIT_COUNT) AS EXIT_COUNT,
SUM(M.EXIT_PREMIUM) AS EXIT_PREMIUM,
SUM(M.EXIT_AMOUNT) AS EXIT_AMOUNT
FROM OLAP_POLICY_DAY M
WHERE M.STATDATE<=DATE'&ENDDATE'
GROUP BY DATE'&ENDDATE',
M.STARTDATE,
M.COMCODE,
M.RISKCODE,
M.BUSINESSNATURE
;
SELECT SUM(ORIG_PREMIUM+ENDO_PREMIUM) PREMIUM FROM TEST_AA
;
-----查出来的值为:975283171.03

CREATE TABLE TEST_BB AS
SELECT DATE'&ENDDATE' AS CLOSEDATE,
M.STARTDATE,
M.COMCODE,
M.RISKCODE,
M.BUSINESSNATURE,
SUM(M.ORIG_PREMIUM) AS ORIG_PREMIUM,
SUM(M.ENDO_PREMIUM) AS ENDO_PREMIUM
FROM OLAP_POLICY_DAY M
WHERE M.STATDATE<=DATE'&ENDDATE'
GROUP BY DATE'&ENDDATE',
M.STARTDATE,
M.COMCODE,
M.RISKCODE,
M.BUSINESSNATURE
;
SELECT SUM(ORIG_PREMIUM+ENDO_PREMIUM) PREMIUM FROM TEST_BB
;

----查出来的值为:975393554.5


两个值为什么会不一样呢?
难道是ORACLE计算时如果两个相同的全少算一个?
数据库是10G


请大侠解答。。。。。。。。。。。。。。
...全文
341 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RotKang 2010-04-28
  • 打赏
  • 举报
回复
谢谢大家的帮助,问题已经解决了。
加上个
TO_DATE(TO_CHAR(M.STATDATE,'YYYY-MM-DD'),'YYYY-MM-DD')

就可以了。
但是我M.STATDATE字段类型是DATE,格式是'YYYY-MM-DD'不了解为什么还要转换。。郁闷。
tangren 2010-04-28
  • 打赏
  • 举报
回复
ORACLE bug:4604970
设置取消hash group by方式
alter system set "_gby_hash_aggregation_enabled" = false ;
RotKang 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java3344520 的回复:]
难道又是SUM GROUP的BUG?
[/Quote]

我现在也有点怀疑是BUG了。。
iqlife 2010-04-28
  • 打赏
  • 举报
回复
难道又是SUM GROUP的BUG?
RotKang 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 robinson_0612 的回复:]
就算是四舍五入的情况应该不会差这么多。
想问一下你 ,
两张表中
SUM(M.ORIG_PREMIUM) AS ORIG_PREMIUM,
SUM(M.ENDO_PREMIUM) AS ENDO_PREMIUM
的结果应该也相差很大吧
在sum前做个round(SUM(M.ORIG_PREMIUM),2)看看。
[/Quote]


刚刚四舍五入试了。结果还是一样相差很大。。。
RotKang 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 robinson_0612 的回复:]
就算是四舍五入的情况应该不会差这么多。
想问一下你 ,
两张表中
SUM(M.ORIG_PREMIUM) AS ORIG_PREMIUM,
SUM(M.ENDO_PREMIUM) AS ENDO_PREMIUM
的结果应该也相差很大吧
在sum前做个round(SUM(M.ORIG_PREMIUM),2)看看。
[/Quote]

对,确实相差很大。
1058549038.15 -83228395.89
1058637645.14 -83244090.64

这就是两个的值。。
我觉得不应该会不一样啊?
Leshami 2010-04-28
  • 打赏
  • 举报
回复
就算是四舍五入的情况应该不会差这么多。
想问一下你 ,
两张表中
SUM(M.ORIG_PREMIUM) AS ORIG_PREMIUM,
SUM(M.ENDO_PREMIUM) AS ENDO_PREMIUM
的结果应该也相差很大吧
在sum前做个round(SUM(M.ORIG_PREMIUM),2)看看。

3,491

社区成员

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

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