如何在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.0
是0.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/