我有一个包含3行值的表:
Row1 : 5
Row2 : 8
Row3 : 9
我想要计算: 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
请提出方法或解决方案。
谢谢大家。
发布于 2011-10-14 21:01:37
您需要使用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
由于您需要为我已经创建的rnum列的滞后函数指定顺序,因此我假设您的表具有某种可以使用的排序列(否则您如何知道要比较哪些行呢?)。
希望这能帮到你。
编辑:此链接对于了解Oracle的领先和滞后功能非常有用。http://www.oracle-base.com/articles/misc/LagLeadAnalyticFunctions.php
发布于 2022-01-20 05:19:56
SET @previousRow=0;
SELECT currentRowValue,
@previousRowValue:= (SELECT COALESCE(currentRowValue, COUNT(0))
FROM tableName
WHERE id< t.id
LIMIT 1) AS previousRowValue,
COALESCE((currentRowValue - @previousRowValue) / @previousRowValue, 0) AS Percentage
FROM tableName t;
https://stackoverflow.com/questions/7766212
复制相似问题