[英]Get percentage based on value in previous row
For the given data:对于给定的数据:
+---+--------+------+
|CID| number | rum |
+---+--------+------+
| 1 | 1.0000 | NULL |
| 3 | 2.0000 | NULL |
| 5 | 2.0000 | NULL |
| 6 | 4.0000 | NULL |
+---+--------+------+
I want to calculate rum with percentage change of current and previous number.我想用当前和以前数字的百分比变化来计算朗姆酒。
rum = (currNumber - prevNumber) / prevNumber * 100
Expected result:预期结果:
+---+--------+------+
|CID| number | rum |
+---+--------+------+
| 1 | 1.0000 | NULL |
| 3 | 2.0000 |100.0 |
| 5 | 2.0000 | 0.0 |
| 6 | 4.0000 |100.0 |
+---+--------+------+
LAG
function doesn't work here in MySQL. LAG
function 在 MySQL 中不起作用。
Assuming the rows are ordered based on CID you can find previous row using correlated subquery:假设行是根据 CID 排序的,您可以使用相关子查询找到前一行:
SELECT CID, number, (
SELECT (c.number - p.number) / p.number * 100
FROM t AS p
WHERE p.CID < c.CID
ORDER BY p.CID DESC
LIMIT 1
) AS rum
FROM t AS c
You can emulate lag()
with a variable:您可以使用变量模拟
lag()
:
set @num = null;
select
cid,
number,
(number- lag_number)/lag_number * 100 rum
from (
select
cid,
@num lag_number,
@num := number number
from mytable
order by cid
) t
order by cid
Demo on DB Fiddle : DB Fiddle 上的演示:
cid | number | rum --: | -----: | ---: 1 | 1.0000 | null 3 | 2.0000 | 100 5 | 2.0000 | 0 6 | 4.0000 | 100
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.