首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Oracle数据库中toCalculate百分比是如何增加/减少的?

在Oracle数据库中toCalculate百分比是如何增加/减少的?
EN

Stack Overflow用户
提问于 2011-10-14 18:16:37
回答 2查看 9.2K关注 0票数 3

我有一个包含3行值的表:

代码语言:javascript
运行
复制
Row1 : 5
Row2 : 8
Row3 : 9

我想要计算: Row2与Row1,Row3与Row2的增加或减少的百分比,所以我会有这个表:计算%的公式是:[Row(n+1) - Row(n)] / Row(2)

代码语言:javascript
运行
复制
     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

请提出方法或解决方案。

谢谢大家。

EN

回答 2

Stack Overflow用户

发布于 2011-10-14 21:01:37

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

您的查询将如下所示:

代码语言:javascript
运行
复制
SELECT ((value - lagv)/lagv) * 100
  FROM (
        SELECT value,
               LAG(value) OVER(ORDER BY <ordering_column>) as lagv
          FROM table1
);

为了测试,我运行了:

代码语言:javascript
运行
复制
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
);

它返回:

代码语言:javascript
运行
复制
Row  Percentage
  1           
  2          60
  3        12.5

由于您需要为我已经创建的rnum列的滞后函数指定顺序,因此我假设您的表具有某种可以使用的排序列(否则您如何知道要比较哪些行呢?)。

希望这能帮到你。

编辑:此链接对于了解Oracle的领先和滞后功能非常有用。http://www.oracle-base.com/articles/misc/LagLeadAnalyticFunctions.php

票数 7
EN

Stack Overflow用户

发布于 2022-01-20 05:19:56

代码语言:javascript
运行
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7766212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档