文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL中怎么计算同比和环比

2023-07-02 12:28

关注

这篇文章主要介绍“MySQL中怎么计算同比和环比”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中怎么计算同比和环比”文章能帮助大家解决问题。

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

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

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

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

同比增长率:

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

环比增长率:

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

同比和环比的区别

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

数据准备

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

CREATE TABLE product  (  `产品ID` varchar(20) NOT NULL,  `产品名称` varchar(20) ,  `产品单价` int (10))INSERT INTO product VALUES ('C1001','产品A',45);INSERT INTO product VALUES ('C1002','产品B',52);INSERT INTO product VALUES ('C1003','产品C',39);

MySQL中怎么计算同比和环比

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

CREATE TABLE sales  (    `订单ID` int NOT NULL PRIMARY KEY AUTO_INCREMENT,  `产品ID` varchar(25) NOT NULL ,  `销售数量` int(20) ,  `销售时间` timestamp(6) NULL DEFAULT NULL);INSERT INTO sales(`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 15, '2020-06-01 10:10:12');INSERT INTO sales(`产品ID`,`销售数量`,`销售时间`)  VALUES ('C1002',26, '2020-05-02 0:10:12');INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 21, '2020-04-03 0:10:12');INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 23, '2020-04-04 0:10:12');INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 0, '2020-03-05 0:10:12');INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 16, '2020-02-06 3:0:12');INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1002', 32, '2020-01-07 0:10:12');INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 16, '2019-12-08 0:12:24');INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 32, '2019-06-09  0:12:24');INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1002', 17, '2019-05-09 0:12:24');

MySQL中怎么计算同比和环比

计算同比和环比

select  year(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),'%')  环比from sales cleft join product d on c.产品ID=d.产品IDleft join (select month(a.销售时间) mm1,                    year(a.销售时间) yy1,                    sum(a.销售数量*d.产品单价) ss1          from sales a          left join product d on a.产品ID=d.产品ID          GROUP BY mm1,yy1) a          on month(c.销售时间) = a.mm1           and a.yy1 = year(c.销售时间)-1  left join  (select month(a.销售时间) mm2,                    year(a.销售时间) yy2,                    sum(a.销售数量*d.产品单价) ss2             from sales a     left join product d on a.产品ID=d.产品ID              GROUP BY mm2,yy2) bon (b.yy2 = year(c.销售时间) and b.mm2+1 = month(c.销售时间) OR (yy2=year(c.销售时间)-1 AND b.mm2 = 12 AND month(c.销售时间) = 1)) group by yy, mm order by yy,mm asc

sql解析

select  year(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),'%')  环比from sales cleft join product d on c.产品ID=d.产品ID # 上一年销售额left join (select month(a.销售时间) mm1,                    year(a.销售时间) yy1,                    sum(a.销售数量*d.产品单价) ss1          from sales a          left join product d on a.产品ID=d.产品ID          GROUP BY mm1,yy1) a          # 同比月份相同,年份减1          on month(c.销售时间) = a.mm1             and a.yy1 = year(c.销售时间)-1 # 今年销售额  left join  (select month(a.销售时间) mm2,                    year(a.销售时间) yy2,                    sum(a.销售数量*d.产品单价) ss2             from sales a     left join product d on a.产品ID=d.产品ID              GROUP BY mm2,yy2) b          # 环比取数考虑到为一月的情况on (b.yy2 = year(c.销售时间) and b.mm2+1 = month(c.销售时间) OR (yy2=year(c.销售时间)-1 AND b.mm2 = 12 AND month(c.销售时间) = 1)) group by yy, mm order by yy,mm asc

结果:

MySQL中怎么计算同比和环比

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

select year(销售时间) yy,month(销售时间) mm,sum(销售数量*b.产品单价) over(order by year(销售时间) ,month(销售时间) ) 累计数量 from sales aleft join product b on a.产品ID=b.产品IDorder by  yy,mm

关于“MySQL中怎么计算同比和环比”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯