使用视图实现数据统计加快程序速度

前几天客户要下一个报表.数据大概是2000条,报表结果是要进行多次统计的.如把统计逻辑放到程序中是不可选的.我试了下.下个报表要2分钟.我试了下视图只用了1秒不到.(视图当然会比应用程序快这是一定的.关键是怎样做到统计逻辑在视图中实现)下面介绍下:

 逻辑是这样的:

A表是用户信息表.B表是用户积分情况表,C表是用户积分使用情况表,B表有两种状态.1-用户可使用的积分,2-用户还不能使用的积分,C表有2种状态.1-已使用了的积分数据,2-已冻结的积分数据,现在要求用户的总积分数,已使用积分数,冻结的积分数,还可使用积分数.

我是这样做的:

sql 代码
  1. create or replace view integral_sum_view as  
  2. select "YGJL_PERSONNEL_ID","P_MOBILE","SUMNUMBER","SUMNUMBERAFFIRM","SUMNUMBERPUT","INTEGRAL" from (   
  3.    select a.YGJL_PERSONNEL_ID as YGJL_PERSONNEL_ID   
  4.    decode(b.sumNumber,null,0,b.sumNumber) as sumNumber,--积分总数   
  5.    decode(c.sumNumberAffirm,null,0,c.sumNumberAffirm) as sumNumberAffirm,--已销减积分   
  6.   decode(d.sumNumberPut,null,0,d.sumNumberPut) as sumNumberPut,--当前冻结积分   
  7.   ( (to_number(decode(b.sumNumber,null,0,b.sumNumber))-   
  8.   to_number(decode(c.sumNumberAffirm,null,0,c.sumNumberAffirm)))-   
  9.   to_number(decode(d.sumNumberPut,null,0,d.sumNumberPut))) as INTEGRAL--可用积分   
  10.   from  A a left join(   
  11.   
  12. --统计积分总数   
  13.   select this_.YGJL_PERSONNEL_ID, sum( decode(this_.ITEM_INTEGRAL,null,0,this_.item_integral)  ) as sumNumber from  
  14.   B this_ where   this_.STATE='3'  group by (this_.YGJL_PERSONNEL_ID)   
  15.    ) b on a.ygjl_personnel_id = b.ygjl_personnel_id left join(   
  16. --统计已销减积分   
  17.   select this_.YGJL_PERSONNEL_ID,  sum( decode(this_.TRADE_INTEGRAL,null,0,this_.TRADE_INTEGRAL)  ) as sumNumberAffirm from  
  18.   C this_,  tygjldept5_ where this_.STATE='1'   
  19.   group by (this_.YGJL_PERSONNEL_ID)) c on a.ygjl_personnel_id = c.ygjl_personnel_id left join(   
  20. --统计当前审请积分   
  21.   select this_.YGJL_PERSONNEL_ID, sum( decode(this_.TRADE_INTEGRAL,null,0,this_.TRADE_INTEGRAL)  ) as sumNumberPut from  
  22.   T_INTEGRAL_TRADE this_,   
  23.  and not this_.STATE='2' group by (this_.YGJL_PERSONNEL_ID)) d on a.ygjl_personnel_id = d.ygjl_personnel_id   
  24.   
  25.    )  
仅供学习...........................................
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值