use*_*175 2 sql oracle oracle10g
我有一个包含3行值的表:
Row1 : 5
Row2 : 8
Row3 : 9
Run Code Online (Sandbox Code Playgroud)
我希望计算增加或减少的百分比:Row2与Row1,Row3相比Row2所以我会有这个表:计算%的公式是: [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
Run Code Online (Sandbox Code Playgroud)
请建议方式或解决方案.
谢谢大家.
您需要使用Oracle Analytical函数LAG:
您的查询将类似于:
SELECT ((value - lagv)/lagv) * 100
FROM (
SELECT value,
LAG(value) OVER(ORDER BY <ordering_column>) as lagv
FROM table1
);
Run Code Online (Sandbox Code Playgroud)
为了测试我跑了:
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
);
Run Code Online (Sandbox Code Playgroud)
它返回:
Row Percentage
1
2 60
3 12.5
Run Code Online (Sandbox Code Playgroud)
由于你需要为我创建了rnum列的LAG函数指定一个订单,我假设你的表有一些你可以使用的排序列,(否则你怎么知道要比较哪些行?).
希望这可以帮助...
编辑:此链接对于了解Oracle的LEAD和LAG功能非常有用.http://www.oracle-base.com/articles/misc/LagLeadAnalyticFunctions.php