ITPub博客

首页 > 数据库 > Oracle > 分析函数牛刀小试

分析函数牛刀小试

Oracle 作者:瀚海小王子 时间:2014-09-21 13:36:38 0 删除 编辑
今天有个同事问我一个问题,想通过一条sql语句完成一个稍显复杂的查询。
结构如下面所示。需要算出tax apply 的值,但是需要汇总charge_amount列和tax_amount列的值
  CDL_CRD Charge_Amount Tax_Amount Tax apply
  50 20 5 50*5/(100+18)
  50 30 6 50*6/(100+18)
  50 50 7 50*7/(100+18)
Total 50 100 18  

比如第一条数据。
50*5/(100+18) 其中100=20+30+50  18=5+6+7

因为数据量很小,就几千条,所以我决定使用分析函数来,要不按照以前的方法,建临时表之类的还是有些麻烦了。
按照要求建了一个简单的表来测试一下。
SQL> create table test(cdl_crd number,charge_amount  number,tax_amount number);
Table created.
SQL> insert into test values(50,20,5);
insert into test values(50,30,6);
1 row created.
SQL> 
1 row created.
SQL> insert into test values(50,50,7);
1 row created.
SQL> commit;
Commit complete.

查看数据分布情况,和示例的一样。
SQL> select *from test;
   CDL_CRD CHARGE_AMOUNT TAX_AMOUNT
---------- ------------- ----------
        50            20          5
        50            30          6
        50            50          7
开始计算。
SQL> select cdl_crd*tax_amount/sum(tax_amount+charge_amount) over(partition by cdl_crd) apply_amount from test;
APPLY_AMOUNT
------------
  2.11864407
  2.96610169
  2.54237288

关于分析函数确实能省去不少表的自连接带来的困扰,而且性能也不赖,在充分的测试之后使用其实还是很不错的。
         

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29900508/viewspace-1275963/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-09-21

  • 博文量
    219
  • 访问量
    175854