如何在MySQL中添加百分比变化列(不是percentage points)?

有一个表格,其中包含百分比变化列:

+---------+
| percent |
+---------+
|   -0.50 |
|    0.50 |
|    1.00 |
|   -0.20 |
|    0.50 |
|   -1.00 |
|   -2.00 |
|    0.75 |
|    1.00 |
|    0.50 |
+---------+


如何编写查询来计算每一行的值的总百分比变化,以便计算出的行表示其百分比变化以及所有以前的百分比变化行?

预期结果:

+---------+---------------+---------------+
| percent | nominal_value | total_percent |
+---------+---------------+---------------+
|   -0.50 |          0.50 |         -0.50 |
|    0.50 |          0.75 |         -0.25 |
|    1.00 |          1.50 |          0.50 |
|   -0.20 |          1.20 |          0.20 |
|    0.50 |          1.80 |          0.80 |
|   -1.00 |          0.00 |         -1.00 |
|   -2.00 |         -2.00 |         -3.00 |
|    0.75 |         -0.50 |         -1.50 |
|    1.00 |          0.00 |         -1.00 |
|    0.50 |          0.50 |         -0.50 |
+---------+---------------+---------------+


其中nominal_value是由percent更改的任意值,因此对于第一行,如果标称值为1.0(100%)但由-0.50-50%)更改,则导致标称值。

然后在第二行,0.5的更改为percent+0.50),因此标称值增加了一半,但+50%但也可以说只是降低了0.5 => 0.75-0.25)从其原始值开始,因为从-25%1.00.75-0.25-25%)。

这正是1.0更改后的内容,total_percent只是出于解释目的,不需要使用。

我正在使用MySQL 8,因此查询可能使用窗口函数/范围等。

这是要复制的测试表:

CREATE TABLE IF NOT EXISTS test
(
    percent DECIMAL(5,2) NOT NULL
)
ENGINE = InnoDB
;

INSERT INTO test (percent) VALUES
(-0.50)
,(0.50)
,(1.00)
,(-0.20)
,(0.50)
,(-1.0)
,(-2.0)
,(0.75)
,(1.0)
,(0.50)
;

最佳答案

DROP TABLE IF EXISTS test;

CREATE TABLE test
( id SERIAL PRIMARY KEY
, percent DECIMAL(5,2) NOT NULL
);

INSERT INTO test (percent) VALUES
(-0.5)
,(0.5)
,(1)
,(-0.2)
,(0.5)
,(-1)
;

SELECT ROUND(@i:=(@i+(@i*percent)),2)n
  FROM test
     , (SELECT @i:=1) vars
 ORDER
    BY id;
+------+
| n    |
+------+
| 0.50 |
| 0.75 |
| 1.50 |
| 1.20 |
| 1.80 |
| 0.00 |
+------+
6 rows in set (0.00 sec)

mysql>

关于mysql - MySQL查询以获取总百分比变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55289067/

10-11 03:23