繁体   English   中英

根据上一行中的值获取百分比

[英]Get percentage based on value in previous row

对于给定的数据:

+---+--------+------+
|CID| number | rum  |
+---+--------+------+
| 1 | 1.0000 | NULL |
| 3 | 2.0000 | NULL |
| 5 | 2.0000 | NULL |
| 6 | 4.0000 | NULL |
+---+--------+------+

我想用当前和以前数字的百分比变化来计算朗姆酒。

rum = (currNumber - prevNumber) / prevNumber * 100

预期结果:

+---+--------+------+
|CID| number | rum  |
+---+--------+------+
| 1 | 1.0000 | NULL |
| 3 | 2.0000 |100.0 |
| 5 | 2.0000 |  0.0 |
| 6 | 4.0000 |100.0 |
+---+--------+------+

LAG function 在 MySQL 中不起作用。

假设行是根据 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

SQL 小提琴

您可以使用变量模拟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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM