mysql8.0 partition by和 lag()和lead()函数的实战案例

发布时间:2024年01月02日

接上篇:MySQL8.0 ROW_NUMBER 调用案例: link

1、将销售额 向后滚动,得到前一次的销售额 进行比较


SELECT     
    t.shopname, -- 商店名称    
    t.sales, -- 销售额    
    t.sale_date, -- 销售日期    
   -- 使用窗口函数LAG()来获取每个商店前一次的销售额  
    --lag(sales,1)表示将sales 列向后移动1行,即得到前一次的销售额  
    lag(t.sales,1) over(PARTITION by shopname ORDER BY sale_date)  as lag_value    
FROM     
    chapter11 t;

在这里插入图片描述
2、计算差值

-- 主查询  
SELECT   
    shopname,              -- 商店名称  
    sale_date,              -- 销售日期  
    sales,                  -- 销售额  
    lag_value,              -- 前一次的销售额(基于shopname和sale_date分组)  
    sales - lag_value AS sales_difference  -- 当前销售额与前一次销售额的差异  
FROM (  
    -- 子查询  
    SELECT  
        t.shopname,          -- 商店名称  
        t.sale_date,          -- 销售日期  
        t.sales,              -- 销售额  
        LAG(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lag_value  -- 使用窗口函数LAG获取每个商店前一次的销售额  
    FROM  
        chapter11 t            -- 从chapter11表中选择数据,别名为t  
) AS subquery;               -- 子查询的别名是subquery

在这里插入图片描述
3、将销售额 向前滚动,得到前一次的销售额 进行比较

-- 主查询  
SELECT   
    t.shopname,              -- 商店名称  
    t.sales,                  -- 销售额  
    t.sale_date,               -- 销售日期  
    LEAD(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lead_value  -- 使用窗口函数LEAD获取每个商店下一次的销售额  
FROM   
    chapter11 t;               -- 从chapter11表中选择数据,别名为t

在这里插入图片描述
4、计算差值

-- 主查询  
SELECT   
    shopname,              -- 商店名称  
    sale_date,              -- 销售日期  
    sales,                  -- 销售额  
    lead_value,              -- 下一次的销售额(基于shopname和sale_date分组)  
    lead_value - sales AS sales_difference  -- 当前销售额与下一次销售额的差异  
FROM (  
    -- 子查询  
    SELECT  
        t.shopname,          -- 商店名称  
        t.sales,              -- 销售额  
        t.sale_date,           -- 销售日期  
        LEAD(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lead_value  -- 使用窗口函数LEAD获取每个商店下一次的销售额  
    FROM  
        chapter11 t            -- 从chapter11表中选择数据,别名为t  
) AS subquery;               -- 子查询的别名是subquery

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_47139678/article/details/135328571
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。