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

本文介绍了如何在MySQL8.0中利用窗口函数LAG和LEAD,分别对销售额进行向后滚动和向前滚动,以计算前后销售额的差值,以便于分析商店销售趋势。
摘要由CSDN通过智能技术生成

接上篇: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

在这里插入图片描述

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值