You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

结果验证

针对你提供的示例数据,执行后会得到:

takentotalkpi
NULL30.02NULL
NULL68.03NULL
174.018.672.55
NULL44.50NULL
134.068.333.01

(注:MySQL默认用NULL表示空值,若要显示NaN,需将ELSE NULL改为ELSE CAST('NaN' AS FLOAT))

内容的提问来源于stack exchange,提问作者imad97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:17:31