簡體   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