今天继续MySQL的问题,也是一个常见的问题,就是计算同比和环比问题,然后在此思路的基础上做一个复合增长率的计算。在MySQL8.0之前,同比环比的思路是通过LEFT JOIN去把上一期的数据求出来,然后再进行计算。再MySQL8.0之后,计算方式就很简单了,通过窗口函数可以很简单的解决,所以今天介绍的是窗口函数的解决方案。
首先是数据的准备,数据如下,我们准备了从2020-2022三年每天三个产品的交易数据,这里就只把最关键的几个字段给留出来了↓
环比、同比一般是计算月度的,所以我们第一步需要先把数据转换成月维度的数据,这里只需要用到最基础的SQL操作,GROUP BY一下就行了,SQL语句和结果如下↓
SELECT
product,
DATE_FORMAT( s_date, "%Y-%m" ) AS ym,
SUM( amount ) AS amount,
SUM( gmv ) AS gmv
FROM
orders
GROUP BY
product,ym
这样我们就得到了每个产品每个月的金额和数量了,而且我们这里是按照产品、月份排序的。然后先计算环比,我们就用数量进行举例了,金额是一个道理。思路是我们需要找到当前月份上一个月的销售数量,使用窗口函数的LAG函数,进行一次偏移就行了。就可以得到上月的金额,然后还需要按产品进行分组,也就是OVER里面的PARTION BY 产品,然后通过环比的公式计算一下就行了,SQL语句个结果如下↓
WITH cte AS(
SELECT
product,
DATE_FORMAT( s_date, "%Y-%m" ) AS ym,
SUM( amount ) AS amount,
SUM( gmv ) AS gmv
FROM
orders
GROUP BY
product,ym
ORDER BY
product,ym)
SELECT
product,ym,amount,
LAG(amount,1) OVER(PARTITION BY product ORDER BY ym) AS lm_amount,
CONCAT(ROUND((amount - LAG(amount,1) OVER(PARTITION BY product ORDER BY ym))/
LAG(amount,1) OVER(PARTITION BY product ORDER BY ym),2),"%") AS MoM_amount
FROM
cte
这里简单介绍一下,同比和环比的公式↓
环比 = (本月值 – 上月值)/上月值,或者 本月值/上月值-1
同比 = (本月值 – 上年同期值)/上年同期值,或者 本月值/上年同期值-1
然后就是同比,思路和环比一样的,只是偏移的月份从1变成了12,SQL语句和结果如下↓
WITH cte AS(
SELECT
product,
DATE_FORMAT( s_date, "%Y-%m" ) AS ym,
SUM( amount ) AS amount,
SUM( gmv ) AS gmv
FROM
orders
GROUP BY
product,ym
ORDER BY
product,ym)
SELECT
product,ym,amount,
LAG(amount,12) OVER(PARTITION BY product ORDER BY ym) AS ly_amount,
CONCAT(ROUND((amount - LAG(amount,12) OVER(PARTITION BY product ORDER BY ym))/
LAG(amount,12) OVER(PARTITION BY product ORDER BY ym),2),"%") AS YoY_amount
FROM
cte
最后是一个巩固练习,使用窗口函数计算复合增长率。先介绍一下复合增长率的公式,就是使用本期的数据除以第一期的数据,然后根据间隔开方,再减一,公式如下↓
CAGR = (Ending Value/Beginning Value)^(1/N)-1
所以我们需要计算两个值,第一个是首期的值,第二个是间隔的期数。两个值都是用窗口函数来计算的,首期使用FIRST_VALUE计算,间隔就用ROW_NUMBER。最后使用我们上面的公司就能计算出复合增长率了,SQL语句和结果如下↓
WITH cte2 AS(
WITH cte AS(
SELECT
product,
DATE_FORMAT( s_date, "%Y-%m" ) AS ym,
SUM( amount ) AS amount,
SUM( gmv ) AS gmv
FROM
orders
GROUP BY
product,ym
ORDER BY
product,ym)
SELECT
product,ym,amount,gmv,
FIRST_VALUE(amount) OVER(PARTITION BY product ORDER BY ym) AS first_amount,
ROW_NUMBER() OVER(PARTITION BY product ORDER BY ym) as rn
FROM
cte)
SELECT
product,ym,amount,first_amount,rn,
CONCAT(ROUND((POWER(1.0*amount/first_amount, 1.0/NULLIF(rn-1,0))-1) * 100,2),"%") AS "月均复合增长率"
FROM
cte2
到此,我们几种对比的方式已经都实现了,都是使用月的维度进行演示的,使用日、周、年维度都是相同的思路,只要把顺序排列好就行了。
如果您购买的 iPhone 是国行版,打开“设置”-“无线局域网”,下拉界面就能够看到“启用 WAPI”选项。 该选项是什么意思呢? WAPI 的中文名是:无线局域网鉴别和保密基础结构。WAPI 既是安全协议,也是中国无线局域网安全强制性标准,目前全球无线局域网领域行业有两...
我们都知道,流量是电商的命脉,没有流量的淘宝店铺就相当于没有人流的超市。产品再多,也无人购买,也更没有销售额的产生。正是因为如此,流量是我们卖家一直所追求的,只有有了流量我们的店铺 我们都知道,流量是电商的命脉,没有流量的淘宝店铺就相当于没有人流的超市。产品再多,也无人购买,也更没有销售额的产生。...
快手和抖音是现在发展的比较好的短视频平台,越来越多的商家们开始利用这些平台达到带货的目的,也有很多的达人愿意利用自己的名气来接广告获取佣金,快手直播带货平台怎么收费?一、快手直播带 快手和抖音是现在发展的比较好的短视频平台,越来越多的商家们开始利用这些平台达到带货的目的,也有很多的达人愿意利用自己...
电商业内人都知道,现在平台方是“大甲方“,因为他们手里握有让品牌方趋之若鹜的流量资源包。这也就是为什么现在的品牌方会争相去PK上面说的这些超级品牌日、欢聚日活动,因为这些IP活动都 电商业内人都知道,现在平台方是“大甲方“,因为他们手里握有让品牌方趋之若鹜的流量资源包。这也就是为什么现在的品牌方会...
养兰花,3种肥交替使用,长势旺盛、叶子浓绿在养兰花的过程中,经常会有花友在给兰花施肥问题上遇到困扰,不知道该给兰花施什么肥,又该如何去合理的施肥。兰花长得旺盛,叶色浓绿,正常开花,才具观赏价值,这就需要平时做到合理的水肥 养兰花,3种肥交替使用,长势旺盛、叶子浓绿 在养兰花的过程中,经常会有花友...
费尽千辛万苦,好不容易买到心仪的机票,结果座位没选好,整个人的心情瞬间down掉,如何能把经济舱坐出头等舱的姿态?▲经济舱前排及紧急出口排座位最佳就排号来说,一般第1-10行的座位为头等舱、第11-30行是商务舱、第31 费尽千辛万苦,好不容易买到心仪的机票,结果座位没选好,整个人的心情瞬间dow...
十月初一送寒衣是很多北方地区都有的习俗,但由于该节日作为四大鬼节之一,所以很多讲究都会出现在我们生活中,那么2022年寒衣节的禁忌可信吗成了很多人都有的疑问,下面小编就和大家一起看看。2022年寒衣节的禁忌可信吗见仁见智 十月初一送寒衣是很多北方地区都有的习俗,但由于该节日作为四大鬼节之一,所以很...
寒衣节是很多北方地区都有的风俗习惯,但由于该节日并不是按照阳历来讲的而是按照阴历,所以农历十月初一是阳历的哪一天成了很多人都好奇的,下面小编就和大家一起看看十月初一节日什么意义。农历十月初一是阳历的哪一天农历十月初一是1 寒衣节是很多北方地区都有的风俗习惯,但由于该节日并不是按照阳历来讲的而是按照...
冬至是二十四节气中的第22个节气,个节气,但由于每每冬至后后昼夜长短都会出现变化,所以每当冬至来临之际,大家常常好奇春2022冬至之后是不是一天比一天长,下面就和大家一起看看冬至之后是不是昼长夜短。2022冬至之后是不是 冬至是二十四节气中的第22个节气,个节气,但由于每每冬至后后昼夜长短都会出现...
对于分手后还想复合的心理是完全可以理解的,无非两种原因,一是依旧喜欢,二是找不到比前任更好的对象。当你分手后想复合首先考虑下你们是因为什么分的手,你是分手方还是被分手方,这个区别还是很大的。分手后想复合要不要联系如果你真 对于分手后还想复合的心理是完全可以理解的,无非两种原因,一是依旧喜欢,二是找...
板栗是生活中比较常见的一种食物,它吃起来粉粉糯糯的,含有多种营养成分,适量食用对身体有一定好处。板栗一般要吃熟的,不建议吃生的,半生半熟的板栗也可以吃,但是不容易消化,可能会引起肠胃不适。红薯和螃蟹可以一起吃吗红薯和螃蟹 板栗是生活中比较常见的一种食物,它吃起来粉粉糯糯的,含有多种营养成分,适量食...
电解质水可以长期喝吗 电解质水是不是智商税? 各大电商平台爆发式销售,一瓶健身教练,社交平台策略笔记铺天盖地..电解质这一概念,早已风靡全网,相关产品的销量也随之上升。 根据2022年电解质饮料趋势报告,电解质饮料已成为饮用水轨道的新出风口,销量同比增长225%,超过能量饮料...
奥粒绒作为时下较为火热的面料之一,想必大家再逛直播间和小红书的时候都有它的推荐,但很多人在清洗该面料的衣物的时候却遇到有轻微缩水的问题,下面小编就和大家一起看看奥粒绒面料洗完缩水正常吗。奥粒绒面料洗完缩水正常吗奥粒绒面料 奥粒绒作为时下较为火热的面料之一,想必大家再逛直播间和小红书的时候都有它的推...
茭白是生活中比较常见的一种食物,它的吃法比较多,大多数人都是炒着吃的,味道都很不错。茭白吃之前一般都是需要剥皮的,剥皮之后的茭白要尽快吃掉,不然容易氧化变黄变黑的,剥好的茭白可以放冰箱冷藏,这样可以放得久一点。剥好了的茭 茭白是生活中比较常见的一种食物,它的吃法比较多,大多数人都是炒着吃的,味道都...
能贷30年绝不贷20年的原因主要是因为利率比较低,这种贷款相对于来说比较划算,对于月供压力也会小很多。那么,30年房贷提前几年还清最划算呢?让我们一起来看看久久派带来的详细介绍吧!能贷30年绝不贷20年为什么能贷30年绝 能贷30年绝不贷20年的原因主要是因为利率比较低,这种贷款相对于来说比较划算...