MySQL中怎么计算同比和环比(mysql,开发技术)

时间:2024-05-02 06:34:44 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

我们先来看看什么是同比,什么是环比:

同比:通常是指今年第n月与去年第n月相比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。

环比:通常是指表示连续2个单位周期(比如连续两月)内的量的变化比。环比包括两种:环比增长速度和环比发展速度。

那同比增长率和环比增长率又如何计算呢:

同比增长率:

同 比 增 长 率 = ( 本 期 数 − 同 期 数 ) / 同 期 数 ∗ 100 %

环比增长率:

环 比 增 长 率 = ( 本 期 数 − 上 期 数 ) / 上 期 数 × 100 %

同比和环比的区别

  • 同比是本期与同期做对比,环比是本期与上期做对比。

  • 环比一般是用在月、日很少用在年上,主要是对比很短时间内涨幅程度,不过由于行业差异,比如旅游,会受到淡旺季影响。

  • 同比一般用在相邻两年,相同时间段内,查看涨幅程度,一般用在两年相同月份,很少用在两月相同日期。

在MySQL中如何计算同比和环比

数据准备

创建商品表并向商品表中添加数据

CREATETABLEproduct(`产品ID`varchar(20)NOTNULL, `产品名称`varchar(20),`产品单价`int(10))INSERTINTOproductVALUES('C1001','产品A',45);INSERTINTOproductVALUES('C1002','产品B',52);INSERTINTOproductVALUES('C1003','产品C',39);

MySQL中怎么计算同比和环比

创建订单明细表并向订单明细表中添加数据

CREATETABLEsales(`订单ID`intNOTNULLPRIMARYKEYAUTO_INCREMENT,`产品ID`varchar(25)NOTNULL, `销售数量`int(20),`销售时间`timestamp(6)NULLDEFAULTNULL);INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1001',15,'2020-06-0110:10:12');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1002',26,'2020-05-020:10:12');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1003',21,'2020-04-030:10:12');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1003',23,'2020-04-040:10:12');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1003',0,'2020-03-050:10:12');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1001',16,'2020-02-063:0:12');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1002',32,'2020-01-070:10:12');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1001',16,'2019-12-080:12:24');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1001',32,'2019-06-090:12:24');INSERTINTOsales(`产品ID`,`销售数量`,`销售时间`)VALUES('C1002',17,'2019-05-090:12:24');

MySQL中怎么计算同比和环比

计算同比和环比

selectyear(c.销售时间)yy,month(c.销售时间)mm,sum(c.销售数量*d.产品单价)ss,concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss1)/ss1*100,2)),0),'%')同比,concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss2)/ss2*100,2)),0),'%')环比fromsalescleftjoinproductdonc.产品ID=d.产品IDleftjoin(selectmonth(a.销售时间)mm1,year(a.销售时间)yy1,sum(a.销售数量*d.产品单价)ss1fromsalesaleftjoinproductdona.产品ID=d.产品IDGROUPBYmm1,yy1)aonmonth(c.销售时间)=a.mm1anda.yy1=year(c.销售时间)-1 leftjoin(selectmonth(a.销售时间)mm2,year(a.销售时间)yy2,sum(a.销售数量*d.产品单价)ss2fromsalesa leftjoinproductdona.产品ID=d.产品IDGROUPBYmm2,yy2)bon(b.yy2=year(c.销售时间)andb.mm2+1=month(c.销售时间)OR(yy2=year(c.销售时间)-1ANDb.mm2=12ANDmonth(c.销售时间)=1))groupbyyy,mmorderbyyy,mmasc

sql解析

selectyear(c.销售时间)yy,month(c.销售时间)mm,sum(c.销售数量*d.产品单价)ss,#concat函数,mysql字符串拼接,因为同比和环比都是百分数#ifnull函数,mysql判断字段是否为空,为空则为0#abs函数,mysql取绝对值,因为我这里取的都是正数#round函数,mysql保留几位小数concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss1)/ss1*100,2)),0),'%')同比,concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss2)/ss2*100,2)),0),'%')环比fromsalescleftjoinproductdonc.产品ID=d.产品ID#上一年销售额leftjoin(selectmonth(a.销售时间)mm1,year(a.销售时间)yy1,sum(a.销售数量*d.产品单价)ss1fromsalesaleftjoinproductdona.产品ID=d.产品IDGROUPBYmm1,yy1)a#同比月份相同,年份减1onmonth(c.销售时间)=a.mm1anda.yy1=year(c.销售时间)-1 #今年销售额leftjoin(selectmonth(a.销售时间)mm2,year(a.销售时间)yy2,sum(a.销售数量*d.产品单价)ss2fromsalesa leftjoinproductdona.产品ID=d.产品IDGROUPBYmm2,yy2)b#环比取数考虑到为一月的情况on(b.yy2=year(c.销售时间)andb.mm2+1=month(c.销售时间)OR(yy2=year(c.销售时间)-1ANDb.mm2=12ANDmonth(c.销售时间)=1))groupbyyy,mmorderbyyy,mmasc

结果:

MySQL中怎么计算同比和环比

除此之外,还想要计算累计销售的话,可以这样写:

selectyear(销售时间)yy,month(销售时间)mm,sum(销售数量*b.产品单价)over(orderbyyear(销售时间),month(销售时间))累计数量fromsalesaleftjoinproductbona.产品ID=b.产品IDorderbyyy,mm
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:MySQL中怎么计算同比和环比的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Kotlin1.6.20新功能Context Receivers怎么使用下一篇:

13 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18