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

如何使用SQL Window Function实现百分比增长计算?

SQL中用窗口函数实现百分比增长计算

核心思路

用窗口函数LAG()获取目标列的上一行数据,再通过(当前值 - 前一行值)/前一行值 * 100的公式计算百分比增长。下面结合你提供的表数据给出具体实现:

场景1:计算Column A的环比百分比增长

假设你的表名为your_table,按Column A的现有顺序(从500到20递减)计算每一行相对上一行的增长:

SELECT 
    "Column A",
    "Column B",
    -- 用COALESCE处理第一行的NULL值,这里替换为0
    COALESCE(
        ROUND(
            ("Column A" - LAG("Column A") OVER (ORDER BY "Column A" DESC)) 
            / LAG("Column A") OVER (ORDER BY "Column A" DESC) * 100, 
            2
        ), 
        0
    ) AS "A列环比增长(%)"
FROM your_table;

场景2:计算Column B的百分比变化

Column B是带%的字符串,需要先转换为数值再计算:

SELECT 
    "Column A",
    "Column B",
    -- 把百分比字符串转成小数格式
    CAST(REPLACE("Column B", '%', '') AS DECIMAL(5,2)) / 100 AS "B列数值",
    -- 计算B列的环比增长百分比
    COALESCE(
        ROUND(
            (CAST(REPLACE("Column B", '%', '') AS DECIMAL(5,2)) - LAG(CAST(REPLACE("Column B", '%', '') AS DECIMAL(5,2))) OVER (ORDER BY "Column A" DESC)) 
            / LAG(CAST(REPLACE("Column B", '%', '') AS DECIMAL(5,2))) OVER (ORDER BY "Column A" DESC) * 100, 
            2
        ), 
        0
    ) AS "B列环比增长(%)"
FROM your_table;

关键说明

  • LAG()函数:用于获取当前行的上一行数据,默认偏移量为1,你可以通过第二个参数指定偏移行数(比如LAG("Column A", 2)获取前两行)。
  • OVER(ORDER BY ...):定义窗口的排序规则,确保LAG()获取的是正确顺序的前一行数据,这里按Column A降序匹配你提供的数据顺序。
  • ROUND():用于控制百分比的小数位数,根据需求调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:27:24