`

由复合指标计算引起的oracle累乘

 
阅读更多
项目中复合指标由配置好的基础指标公式解析后存到如下一张表中:
--Create table
create table TESTRRT
(
  complexid NUMBER not null,--复合指标id
  basicid   VARCHAR2(20) not null,--基础指标id
  chu       VARCHAR2(20),--除法标示(a为分子,b为分母)
  plus      VARCHAR2(20),--乘法标示
  direction NUMBER,--计算方向(1为正2为负)
  value     NUMBER
)

复合指标1:(1001+1003)/(1002-1004)=-12
复合指标2:1006*1007/(2011+2022)=1.5
复合指标3:1009*1010/1011=0.5



--单独除法关系的指标
select t.complexid,
       decode(sum(case
                    when t.chu = 'b' and t.direction = 1 then
                     t.VALUE
                    when t.chu = 'b' and t.direction = 2 then
                     -t.VALUE
                  end),
              0,
              0,
              sum(case
                    when t.chu = 'a' and t.direction = 1 then
                     t.VALUE
                    when t.chu = 'a' and t.direction = 2 then
                     -t.VALUE
                  end) / sum(case
                               when t.chu = 'b' and t.direction = 1 then
                                t.VALUE
                               when t.chu = 'b' and t.direction = 2 then
                                -t.VALUE
                             end))             
  from testrrt t
 where t.complexid = 1
 group by t.complexid

网上查找相关资料表明,http://blog.sina.com.cn/s/blog_63f3c0b201015gh9.htmloracle的累乘用法已经被很多人使用过啦。
exp(y)
【功能】返回e的y次幂(e为数学常量)
【参数】y,数字型表达式
ln(y)
【功能】返回e为底的自然对数。
由于ln对应的y参数仅可为正数,所以如下进行连乘的方法只能针对正数,不包含负数哦~

--先乘后除指标【累乘算法:exp(ln(a)+ln(b)+ln(c))=a*b*c】
select t.complexid,
decode(exp(sum(ln(case
                      when t.plus = 'p' and t.chu = 'b' then
                       t.value
                    end))),0,0,exp(sum(ln(case
                      when t.plus = 'p' and t.chu = 'a' then
                       t.value
                    end)))/sum(case
                      when t.plus is null and t.chu = 'b' then
                       t.value
                    end)
                    )
          mvalues
    from testrrt t
   where t.complexid in (2,3)
   group by t.complexid

  • 大小: 22.6 KB
  • 大小: 32.7 KB
分享到:
评论

相关推荐

    oracle最常用的函数或方法总结

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其丰富的函数和方法库为SQL查询提供了强大的支持。在日常的数据操作和分析中,掌握一些常用的Oracle函数和方法是至关重要的。以下是对"Oracle最常用的...

    在oracle中利用函数实现计算公式解析(支持括号).txt

    在oracle中利用函数实现计算公式解析|在oracle中利用函数实现计算公式解析

    清华大学计算中心oracle培训资料

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,由甲骨文公司(Oracle Corporation)开发。在“清华大学计算中心oracle培训资料”中,你可以学习到Oracle数据库的基础知识,包括其核心概念、架构和管理...

    Oracle计算连续天数,计算连续时间,Oracle连续天数统计

    在Oracle数据库中,计算连续天数或连续时间是一项常见的需求,尤其在数据分析、报表生成或者业务规则检查等场景。这个任务通常涉及到日期处理和逻辑判断,Oracle提供了丰富的日期函数和运算符来支持这类操作。本篇...

    Oracle计算年龄(精确到秒)

    通过入参 生日 ,计算日期(默认sysdate),计算年龄 精确到秒

    C# 未在本地计算机上注册"OraOLEDB.Oracle"提供程序

    在使用 OLEDB 连接 Oracle 数据库时,需要安装 Oracle 数据访问组件 (ODAC--Oracle Data Access Components),其中包括 Oracle Provider for OLEDB。这是因为 OraOLEDB.Oracle 提供程序是 Oracle 的一部分,需要单独...

    VMWare上Oracle License的计算方式

    4. 许可计算工具和资源:Oracle提供了多种工具来帮助用户进行许可计算,例如Oracle License and Service Contract Management Tool(OLSM),以及VMware官方提供的工具和建议。 5. 与Oracle的沟通:在不确定如何...

    清华大学计算中心ORACLE培训资料

    这份“清华大学计算中心ORACLE培训资料”是学习Oracle数据库技术的重要资源,它由清华大学计算中心精心编制,旨在帮助学员深入理解Oracle的核心概念、功能以及实际操作技巧。 一、Oracle基础 Oracle数据库系统是...

    oracle资源监控指标

    oracle资源监控指标.docx

    使用oracle计算系统当前时间的毫秒数

    ### 使用Oracle计算系统当前时间的毫秒数 在IT领域,特别是数据库管理和应用程序开发中,时间戳是非常重要的数据类型之一。它可以用来记录事件的发生时间、处理时间等关键信息。对于Oracle数据库用户而言,有时需要...

    计算oracle的表空间使用情况

    计算oracle的表空间使用情况,sql语句。。。。。

Global site tag (gtag.js) - Google Analytics