2011-10-14 41 views
2

我有一個表3行包含值:如何在Oracle數據庫中計算增加/減少的百分比?

Row1 : 5 
Row2 : 8 
Row3 : 9 

我希望計算增加或減少的百分比:行2相比ROW1,ROW3到行2,所以我將具有該表中: 的公式計算%是:[Row(n+1) - Row(n)]/Row(2)

 Value Percentage 
Row1 : 5   - 
Row2 : 8  60% (increase compared to Row1) | (8-5)/5 
Row3 : 9  12.5%(increase compared to Row2)| (9-8)/8 

請提出建議的方式或解決方案。

謝謝大家。

回答

6

您需要使用Oracle分析函數LAG:

您的查詢將看起來像:

SELECT ((value - lagv)/lagv) * 100 
    FROM (
     SELECT value, 
       LAG(value) OVER(ORDER BY <ordering_column>) as lagv 
      FROM table1 
); 

爲了測試我跑:

WITH t AS (SELECT 1 as rnum, 
        5 AS value FROM DUAL 
      UNION 
      SELECT 2 as rnum, 
        8 AS value FROM DUAL 
      UNION 
      SELECT 3 as rnum, 
        9 AS value FROM DUAL 
     ) 
SELECT ((value - lagv)/lagv) * 100 AS Percentage 
    FROM (
     SELECT value, 
       LAG(value) OVER(ORDER BY rnum) as lagv 
      FROM t 
); 

,它返回:

Row Percentage 
    1   
    2   60 
    3  12.5 

A您需要爲LAG函數指定一個訂單我已經創建了rnum列,我假設您的表具有某種您可以使用的排序列(否則,您如何知道要比較哪些行?)。

希望這有助於...

編輯:此鏈接是學習Oracle的超前滯後功能非常有用。 http://www.oracle-base.com/articles/misc/LagLeadAnalyticFunctions.php

+0

如果存在空值並且只想計算最近非空值的百分比變化,該怎麼辦? – jvalenti