加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

oracle sql语句实现累加、累减、累乘、累除

(2012-08-14 11:18:30)
标签:

杂谈

分类: sql

oracle sql语句实现累加、累减、累乘、累除

2011-02-19 09:03 366人阅读 评论(1) 收藏 举报

在oracle开发过程中经常会遇到累加、减、乘、除的问题。
下面对这个做个小的总结


--创建测试表
create table aspen(parent_id number,part_id number,qnty number);
insert into aspen values(1,1,2);
insert into aspen values(1,2,3);
insert into aspen values(1,3,2);
insert into aspen values(1,4,5);
insert into aspen values(2,2,3);
insert into aspen values(2,3,5);
insert into aspen values(2,4,7);


--实现累加
select parent_id,part_id,qnty,
sum(qnty) over(partition by parent_id order by part_id) running_prod
from aspen

 

 PARENT_ID    PART_ID       QNTY RUNNING_PROD
---------- ---------- ---------- ------------
                                   2
                                   5
                                   7
                                  12
                                   3
                                   8
                                  15


--实现累减
select parent_id,part_id,qnty,
 sum(decode(rn,1,qnty,-qnty)) over(partition by parent_id order by part_id) running_prod
from (select parent_id,part_id,qnty,
      row_number() over(partition by parent_id order by part_id) rn
      from aspen)


 PARENT_ID    PART_ID       QNTY RUNNING_PROD
---------- ---------- ---------- ------------
                                   2
                                  -1
                                  -3
                                  -8
                                   3
                                  -2
                                  -9

--实现累乘
select parent_id,part_id,
exp(sum(ln(qnty)) over(partition by parent_id order by part_id)) running_prod
from aspen


PARENT_ID    PART_ID RUNNING_PROD
--------- ---------- ------------
                          2
                          6
                         12
                         60
                          3
                         15
                        105

--实现累除
select parent_id,part_id,
exp(sum(decode(rn,1,ln(qnty),-ln(qnty))) over(partition by parent_id order by part_id)) running_prod
from (select parent_id,part_id,qnty,
      row_number() over(partition by parent_id order by part_id) rn
      from aspen )


 PARENT_ID    PART_ID RUNNING_PROD
---------- ---------- ------------
                           2
                  .666666667
                  .333333333
                  .066666667
                           3
                          .6
                  .085714286

累乘和累除的缺陷是不能对负数进行运算 因为ln(负数)没有意义


转自http://blog.csdn.net/zhuomingwang/article/details/6194556

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有