ORACLE计算同比环比

您所在的位置:网站首页 同比增长用什么函数计算 ORACLE计算同比环比

ORACLE计算同比环比

2024-02-26 01:57| 来源: 网络整理| 查看: 265

同比环比概念和公式

同比: 同比一般情况下是今年第n月与去年第n月比

环比: 表示连续2个统计周期(比如连续两月)内的量的变化比。

同比增长率=(本期数-同期数)/|同期数|×100%

环比增长率=(本期数-上期数)/上期数×100%

需求:

计算2020年01月到2020年2月, 每个月的本期值和环比和同比率

数据库 表和数据准备 CREATE TABLE test ( "ID" NUMBER NOT NULL , "VALUE" NUMBER , "YEARMONTH" VARCHAR2(6 CHAR) , CONSTRAINT "SYS_C0086930" PRIMARY KEY ("ID") ) INSERT INTO "test"("ID", "VALUE", "YEARMONTH") VALUES ('1', '100', '202002'); INSERT INTO "test"("ID", "VALUE", "YEARMONTH") VALUES ('2', '80', '202001'); INSERT INTO "test"("ID", "VALUE", "YEARMONTH") VALUES ('3', '120', '201912'); INSERT INTO "test"("ID", "VALUE", "YEARMONTH") VALUES ('4', '142', '201911'); INSERT INTO "test"("ID", "VALUE", "YEARMONTH") VALUES ('5', '70', '201910'); INSERT INTO "test"("ID", "VALUE", "YEARMONTH") VALUES ('6', '51', '201901'); oracle 需要用到的函数简绍:

NVL(expr1, expr2)

expr1为空时, 给默认值expr2

TO_CHAR(number,‘格式’)

格式化函数 如:FM99990.00 9代表此位为0或没有值时,不显示. 0代表此位为0或者没有值时补0. 小数点前是99990五位,代表数字的整数位只能有5位,小数位00表示,保留2位小数

ROUND(number[,decimals])

number 待做截取处理的数值 decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分,并四舍五入。 如果为负数则表示从小数点开始左边的位数,相应整数数字用0填充,小数被去掉. 对截取的数字要四舍五入。

DECODE(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

该函数的含义如下: IF 条件=值1 THEN     RETURN(返回值1) ELSIF 条件=值2 THEN     RETURN(返回值2)     ...... ELSIF 条件=值n THEN     RETURN(返回值n) ELSE     RETURN(缺省值) END IF

计算同比和环比最重要的函数

LAG(exp_str,offset,default) OVER(partition by expr2 order by expr3)

LEAD(exp_str,offset,default) OVER(partition by expr2 order by expr3)

exp_str 要做对比的字段 offset 偏移量 default 默认值 partition by expr2 根据expr2分组 order by expr3 根据expr3排序 LAG函数: 向上取offset行的数据中exp_str字段,如果没有取default LEAD函数: 向下取offset行的数据种exp_str字段,如果没有取default OVER函数: 先对数据先进行分组和排序. 如: 这次测试,我们用日期进行排序,保证了LAG函数向上取offset行,能取到 对应的环比和同比的日期的值

再简绍一下,如何获取一个时间段内连续的日期

这样保证了如果数据库中有些日期没有数据时,可以给一个默认值,使LAG和LEAD函数可以获取到正确的行数

SELECT AA.monthlist, NVL(BB.CAP,0) CAP FROM -- 获取需要查询的时间范围内 连续月份的 数据值 (SELECT TO_CHAR( ADD_MONTHS( TO_DATE( '201901', 'yyyyMM' ), ROWNUM - 1 ), 'yyyyMM' ) AS monthlist FROM DUAL CONNECT BY ROWNUM = 201901 AND YEARMONTH


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3