Oracle分析函式七——分析函式案例

bq_wang發表於2009-08-02
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEOracle分析函式——分析函式案例

環比

  環比就是現在的統計週期和上一個統計週期比較。例如20087月份與20086月份相比較稱其為環比。

  環比發展速度是報告期水平與前一時期水平之比,表明現象逐期的發展速度。如計算一年內各月與前一個月對比,即2月比1月,3月比2月,4月比3 ……12月比11月,說明逐月的發展程度。如分析抗擊"非典"期間某些經濟現象的發展趨勢,環比比同比更說明問題。

  學過統計或者經濟知識的人都知道,統計指標按其具體內容、實際作用和表現形式可以分為總量指標、相對指標和平均指標。由於採用基期的不同,發展速度可分為同比發展速度、環比發展速度和定基發展速度。簡單地說,就是同比、環比與定基比,都可以用百分數或倍數表示。

  定基比發展速度,也簡稱總速度,一般是指報告期水平與某一固定時期水平之比,表明這種現象在較長時期內總的發展速度。同比發展速度,一般指是指本期發展水平與上年同期發展水平對比,而達到的相對發展速度。環比發展速度,一般指是指報告期水平與前一時期水平之比,表明現象逐期的發展速度。

  同比和環比,這兩者所反映的雖然都是變化速度,但由於採用基期的不同,其反映的內涵是完全不同的;同比與環比相比較,而不能拿同比與環比相比較;而對於同一個地方,考慮時間縱向上發展趨勢的反映,則往往要把同比與環比放在一起進行對照

 

 

同比

  英文:year-on-year

  同比就是今年第n月與去年第n月比;(環比就是今年第n月與第n-1月或第n+1月比)學過統計或者經濟知識的人都知道,統計指標按其具體內容、實際作用和表現形式可以分為總量指標、相對指標和平均指標。由於採用基期的不同,發展速度可分為同比發展速度、環比發展速度和定基發展速度。簡單地說,就是同比、環比與定基比,都可以用百分數或倍數表示。

  同比發展速度主要是為了消除季節變動的影響,用以說明本期發展水平與去年同期發展水平對比而達到的相對發展速度。如,本期2月比去年2月,本期6月比去年6月等。其計算公式為:同比發展速度=本期發展水平/去年同期發展水平×100%。在實際工作中,經常使用這個指標,如某年、某季、某月與上年同期對比計算的發展速度,就是同比發展速度。

  環比發展速度是報告期水平與前一時期水平之比,表明現象逐期的發展速度。如計算一年內各月與前一個月對比,即2月比1月,3月比2月,4月比3 ……12月比11月,說明逐月的發展程度。如分析抗擊"非典"期間某些經濟現象的發展趨勢,環比比同比更說明問題。

  定基比發展速度也叫總速度。是報告期水平與某一固定時期水平之比,表明這種現象在較長時期內總的發展速度。如,"九五"期間各年水平都以1995年水平為基期進行對比,一年內各月水平均以上年12月水平為基期進行對比,就是定基發展速度。

 

 

定基比

  定基比發展速度也叫總速度。是報告期水平與某一固定時期水平之比,表明這種現象在較長時期內總的發展速度。如,"九五"期間各年水平都以1995年水平為基期進行對比,一年內各月水平均以上年12月水平為基期進行對比,就是定基發展速度。

  另可參見同比、環比:

  同比發展速度主要是為了消除季節變動的影響,用以說明本期發展水平與去年同期發展水平對比而達到的相對發展速度。如,本期2月比去年2月,本期6月比去年6月等。其計算公式為:同比發展速度=本期發展水平/去年同期發展水平×100%。在實際工作中,經常使用這個指標,如某年、某季、某月與上年同期對比計算的發展速度,就是同比發展速度。

  環比發展速度是報告期水平與前一時期水平之比,表明現象逐期的發展速度。如計算一年內各月與前一個月對比,即2月比1月,3月比2月,4月比3 ……12月比11月,說明逐月的發展程度。如分析抗擊"非典"期間某些經濟現象的發展趨勢,環比比同比更說明問題

 

 

CREATE TABLE salaryByMonth

(

 employeeNo  varchar2(20),

 yearMonth varchar2(6),

 salary number

)

 

SELECT

  employeeno,

  yearmonth,

  salary,   

  MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY yearmonth) OVER (PARTITION BY employeeno) first_salary, --基比分析 salary/first_salary  

  LAG(salary,1,0) OVER (PARTITION BY employeeno ORDER BY yearmonth) AS prev_sal,    --環比分析,與上個月份進行比較

  LAG(salary,12,0) OVER (PARTITION BY employeeno ORDER BY yearmonth) AS prev_12_sal --同比分析,與上個年度相同月份進行比較  

  FROM salaryByMonth

ORDER BY employeeno,yearmonth

 

--SQL常用的演算法

SELECT *

  FROM salaryByMonth a

 WHERE (a.employeeno,a.salary) IN

 (

  SELECT b.employeeno,max(salary)

    FROM salaryByMonth b

   GROUP BY b.employeeno

 )

 

--用分析函式替代

SELECT distinct

  employeeno,

  MAX(salary) OVER (PARTITION BY employeeno) AS max_salary,

  FIRST_VALUE(yearmonth) OVER (PARTITION BY employeeno ORDER BY salary DESC) AS high_yearmonth    

  FROM salaryByMonth

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-611068/,如需轉載,請註明出處,否則將追究法律責任。

相關文章