设为首页 收藏本站
查看: 583|回复: 0

[经验分享] Oracle计算环比示例

[复制链接]

尚未签到

发表于 2016-7-19 10:37:45 | 显示全部楼层 |阅读模式
  环比就是今年第n月与第n-1月或第n+1月比;同比就是今年第n月与去年第n月比。

  建测试表,假设是个销售数量表:
create table t (dt date,cnt number);

  随便插入些测试数据,最后表的内容如下:
DT                CNT
---------- ----------
2012-02-09         15
2012-02-21          2
2012-03-23          1
2012-03-23          5
2012-04-23          2
2012-05-12         20
2012-07-01         20
2012-07-21         20

  显示环比,如果某个月没有销售,就有点儿麻烦。
  先想个办法,显示本年度的1至12月,有个很有技巧的技术来实现:
SQL> set pagesize 20
SQL> with m as (select '2012-'||lpad(rownum,2,'0') v from dual connect by level<=12) select * from m;
V
---------
2012-01
2012-02
2012-03
2012-04
2012-05
2012-06
2012-07
2012-08
2012-09
2012-10
2012-11
2012-12

  接下来就容易了,两个表外连,使用lag统计函数就可以了。
with m as (select '2012-'||lpad(rownum,2,'0') v from dual connect by level<=12)
select m.v "月份",nvl(sum(t.cnt),0) "销售数量",
lag(nvl(sum(t.cnt),0),1) over (order by m.v) "上月销量数量",
nvl(sum(t.cnt),0)-lag(nvl(sum(t.cnt),0),1) over (order by m.v) "环比增加量",
round((case when nvl(sum(t.cnt),0)=0 then null else (nvl(sum(t.cnt),0)-lag(nvl(sum(t.cnt),0),1) over (order by m.v))/nvl(sum(t.cnt),0) end)*100,1) "环比增加比例(%)"
from m left outer join t
on m.v=to_char(t.dt,'yyyy-mm') group  by m.v order by 1

月份        销售数量 上月销量数量 环比增加量 环比增加比例(%)
--------- ---------- ------------ ---------- ---------------
2012-01            0
2012-02           17            0         17             100
2012-03            6           17        -11          -183.3
2012-04            2            6         -4            -200
2012-05           20            2         18              90
2012-06            0           20        -20
2012-07           40            0         40             100
2012-08            0           40        -40
2012-09            0            0          0
2012-10            0            0          0
2012-11            0            0          0
2012-12            0            0          0

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-246234-1-1.html 上篇帖子: Oracle 时间戳 触发器 下篇帖子: Oracle游标绑定变量使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表