MySQL中如何将一列值除以另一列的上一行值计算KPI?
MySQL实现指定KPI计算需求
要实现你需要的KPI计算,核心是获取每行的上一行total值,再结合当前行的taken值进行计算。可以用MySQL的窗口函数LAG()来实现,具体步骤如下:
关键思路
- 用
LAG(total) OVER (ORDER BY 排序字段)获取当前行的上一行total值 - 通过
CASE WHEN判断:如果当前行taken不为空,则计算taken / 上一行total并保留两位小数;否则返回空值(若要严格匹配示例中的NaN,可替换为CAST('NaN' AS FLOAT),MySQL浮点类型支持NaN) - 必须指定
ORDER BY的字段(比如自增主键id),确保行顺序固定,否则LAG()的结果会不可靠
完整SQL语句
假设你的表名为your_table,且有自增主键id来保证行顺序(如果没有这类字段,建议添加):
SELECT taken, total, CASE WHEN taken IS NOT NULL THEN ROUND(taken / LAG(total) OVER (ORDER BY id), 2) ELSE NULL -- 若需显示NaN,替换为 CAST('NaN' AS FLOAT) END AS kpi FROM your_table;
结果验证
针对你提供的示例数据,执行后会得到:
| taken | total | kpi |
|---|---|---|
| NULL | 30.02 | NULL |
| NULL | 68.03 | NULL |
| 174.0 | 18.67 | 2.55 |
| NULL | 44.50 | NULL |
| 134.0 | 68.33 | 3.01 |
(注:MySQL默认用NULL表示空值,若要显示NaN,需将ELSE NULL改为ELSE CAST('NaN' AS FLOAT))
内容的提问来源于stack exchange,提问作者imad97
相关产品推荐
相关产品推荐

