Sql 如何计算Oracle数据库中增加/减少的百分比?
我有一个包含3行的表,其中包含值:Sql 如何计算Oracle数据库中增加/减少的百分比?,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我有一个包含3行的表,其中包含值: Row1 : 5 Row2 : 8 Row3 : 9 我希望计算:第2行与第1行、第3行与第2行相比的增加或减少百分比,因此我将有以下表格: 计算%的公式是:[行(n+1)-行(n)]/行(2) 请提出方法或解决方案 谢谢大家。您需要使用Oracle分析功能LAG: 您的查询将类似于: SELECT ((value - lagv)/lagv) * 100 FROM ( SELECT value, LAG(va
Row1 : 5
Row2 : 8
Row3 : 9
我希望计算:第2行与第1行、第3行与第2行相比的增加或减少百分比,因此我将有以下表格:
计算%的公式是:[行(n+1)-行(n)]/行(2)
请提出方法或解决方案
谢谢大家。您需要使用Oracle分析功能LAG: 您的查询将类似于:
SELECT ((value - lagv)/lagv) * 100
FROM (
SELECT value,
LAG(value) OVER(ORDER BY <ordering_column>) as lagv
FROM table1
);
它返回:
Row Percentage
1
2 60
3 12.5
由于您需要为我创建的rnum列的LAG函数指定一个顺序,因此我假设您的表中有某种可以使用的排序列(否则您如何知道要比较哪些行?)
希望这有助于
编辑:此链接对于了解Oracle的超前和滞后功能非常有用 如果存在空值,并且只想计算最近的非空值的百分比变化,该怎么办?
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