【发布时间】:2019-08-12 19:37:30
【问题描述】:
如何在 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 (@ 987654334@) 从其原始值从1.0 到0.75 是1.0 的-0.25 (-25%)。
这正是我在更改total_percent 之后的内容,nominal_value 仅用于说明目的,不需要。
我使用的是 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)
;
【问题讨论】:
-
你需要一个主键
-
我看不出你如何能从 0 的标称值到 -2 的标称值。一旦某物为 0,该值的任何百分比变化都会给出 0。
-
在数据的第一行和最后一行,
nominal_value是 0.5。但是在第一种情况下total_percent是-0.5,在最后一种情况下是+0.5。这怎么可能? -
@Nick 例如,您的银行账户有 100 美元的余额并花费了 100%,所以结果是余额 = 0 美元,但是因为您的账户有贷款能力,所以您再花 100 美元购买相同的东西天,所以你最终得到 -$100 的余额,这反映在初始余额的 -200% 和 -100% 从 $0 进入部门。另一个例子是 sinus 函数值的变化,它从 -1 到 0 到 +1 并回到 -1 穿过 0。如果你停在 0 处,那么你将无法以百分比表示它的上升或下降时间。
-
@jimmix 如果您没有某种唯一标识行的方法,那么您实际上就没有表格。没有一个,您可能会意外地得出符合您期望的结果,但这只是盲目的运气。
标签: mysql percentage calculation