在平时的工作中,由于主要接触ERP方面的业务数据处理,Oracle的分析函数一直没怎么使用,但随着公司开始做数据分析,Oracle的分析函数出现的越来越频繁。因此准备把分析函数中重要的几个常用函数用法分析下。
创新互联建站秉承实现全网价值营销的理念,以专业定制企业官网,成都网站制作、网站建设、外贸网站建设,小程序设计,网页设计制作,成都做手机网站,成都全网营销推广帮助传统企业实现“互联网+”转型升级专业定制企业官网,公司注重人才、技术和管理,汇聚了一批优秀的互联网技术人才,对客户都以感恩的心态奉献自己的专业和所长。
Lag(): 在查询中取出同一字段前N行的数据作为独立的列。
表达式理解为:按column2进行分组且根据column3进行排序,取column1前N行(往前数第N行)的列值,如果为空则用xxxx进行默认。
由此可以想到,采用该方式可以计算环比以及同比,同比与表间join,该函数将大大减少SQL的量。
Lead(): 在查询中取出同一字段后N行的数据作为独立的列。
表达式理解为:按column2进行分组且根据column3进行排序,取column1后N行(往后数第N行)的列值,如果为空则用xxxx进行默认。
lag和lead的函数,主要应用于查找前后行的列记录,使用这两个分析函数,可以减少子查询或表关联,并且能够大大提升sql语句性能。
substr(t.salarymonth, -2)) "同比",
sum(t.salary) /
(select sum(t1.salary)
from D_MONTH_SALARY t1
where t1.salarymonth =
to_char(to_date(t.salarymonth, 'yyyymm') - 1, 'yyyymm')) "环比"
from D_MONTH_SALARY t
group by t.salarymonth;
同学 你这个问题我也想了老半天 终于帮你整出一个可行的方案了 本地已经测试
帮你的难点解决了 不明白再问了
语句还是帮你贴出来吧,oracle和sql差不多
select *,ROW_NUMBER() over (order by rq)*1 bz into #temp1 from #temp order by rq
select *,ROW_NUMBER() over (order by rq)+1 bz into #temp2 from #temp order by rq
select a.rq 本月,a.amount 本月数量,b.amount 同比数量,b.rq 同比日期
from (select * from #temp1
) a left join (select * from #temp2
) b on a.bz=b.bz
同比增长率=(本期数-同期数)÷同期数×100%
同比表示第n月与第n月比(n≤12),说明本期发展水平与同期发展水平对比达到的相对发展速度。
举例:去年3月的产值100万,本年3月的产值300万,同比增长率=(300-100)÷100=200%,代表和同期相比较的增长率。
但如果同期数为负值的情况,公式如下:同比增长率=(本期数-同期数)÷ |同期数|×100%,同比增长率=(50W-(-100W))/|-100W||×100%=150%
扩展资料:
同比和环比:
同比、环比与定基比,都可以用百分数或倍数表示。同比发展速度指是指本期发展水平与上年同期发展水平对比,而达到的相对发展速度。环比发展速度指报告期水平与前一时期水平之比,表明现象逐期的发展速度。
同比和环比,这两者所反映的虽然都是变化速度,但由于采用基期的不同,其反映的内涵是完全不同的。同比与环比最大的区别体现为两个方面:
1、对比基数不同,同比的对比基数是上年的同一期间的数据,环比的基数则是上一期间的数据。
2、侧重点不同,环比侧重反映数据的短期趋势,会受到季节等因素的影响,同比更加侧重反映长期的大趋势,也就规避了季节的因素。
参考资料来源:百度百科-同比
select 年份,季度,营收,营收-lag(营收,1,null) over(order by 年份,季度) from t ;
同比是什么
同比就是今年第n月与去年第n月比。同比主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相应发展速度。
同比的由来
由于采用基期的不同,发展速度可分为同比发展速度、环比发展速度和定基发展速度。简单地说,就是同比、环比与定基比,都可以用百分数或倍数表示。
同比增长计算公式
同比增长率=(本期数-同期数)÷同期数×100%
同比增长率,一般是指和同期相比较的增长率。
某个指标的同比增长=(某个指标的值-同期这个指标的值)/同期这个指标的值。