写点什么

最新版 MySQL8 绝对有用的 lag 函数实现同比、环比、均差计算

作者:知识浅谈
  • 2022 年 8 月 22 日
    吉林
  • 本文字数:936 字

    阅读完需:约 3 分钟

最新版MySQL8 绝对有用的lag函数实现同比、环比、均差计算

🍁 作者:知识浅谈,CSDN 签约讲师,CSDN 博客专家,华为云云享专家,阿里云专家博主

📌 擅长领域:全栈工程师、爬虫、ACM 算法

💒 公众号:知识浅谈

🔥 联系方式 vx:zsqtcc


🤞最新版 MySQL8 绝对有用的 lag 函数实现同比、环比、均差计算🤞


正菜来了⛳⛳⛳

🎈同比和环比

  • 同比:对于当前月份,去年的和当前相同月份和今年的当前月份增长率。

  • 环比:对于当前月份,相比于上月份的增长率。这次求的同比环比用到的有 lag 函数和开窗函数 over()。


MySQL8.x 提供了 Lag 开窗函数可以超级方便的实现类似功能


  • lead()/Iag()函数 lag(num,t),对于统计分析的结果取当前位置之前的多少行。lag 与 lead 函数是跟偏移量相关的两个分析函数通过这两个函数可以在一次查询中取出同一字段的前 N 行的数据 lag)和后 N 行的数据 lead)作为独立的列,从而更方便地进行进行数据过滤原始脚本。

🎈实例

  • 查找每一个月份前一个月份的 numlag(num,1,0) 表示取出这个 num 字段前 1 条数据的 num 字段。


  select *  lag(num,1,0)over(PARTITION by product order by period)  last_month  from sale_data order by product,period
复制代码


  • 查找每一个月份去年的月份的值和从开始到当前月份每种 product 所有的 num 平均值


  select *  lag(num,1,0)over(PARTITION by product order by period)  last_month,  lag(num,12,0)over(PARTITION by product order by period)  last_month,  avg(num)over(PARTITION by product order by period)avg_num  from sale_data order by product,period
复制代码


  select product,num  ,last_month,round((num-last_month)/last_month 100,2) mom  ,last_year,round((num-last_year)/last_year *100,2) yoy  ,avg_num, round((num-avg_num)/avg_num *100,2) avg_diff  from(    select *    lag(num,1,0)over(PARTITION by product order by period)    last_month,    lag(num,12,0)over(PARTITION by product order by period)    last_month,    avg(num)over(PARTITION by product order by period)avg_num    from sale_data order by product,period  )
复制代码

🍚总结

以上就是关于 Mysql8 种提供的 lag 函数以及开窗函数 over() 这两种函数在同比环比上的应用,相比于之前 mysql5 中需要写大量的 sql 来解决同比环比的问题节省大量 sql 语句编写,希望有所帮助。

发布于: 刚刚阅读数: 4
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云社区专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
最新版MySQL8 绝对有用的lag函数实现同比、环比、均差计算_MySQL_知识浅谈_InfoQ写作社区