找文章 / 找答案
分享到

干货丨MySQL计算同比和环比

资讯 2022-11-22 14:41 1973人浏览 1人回复
摘要

什么是同环比同比:同比是当年同一时间的数据和上年同一时间的数据的对比行为。环比:环比是将本期数据与上期数据对比的行为。计算公式同比:(本期发展水平-上年同期发展水平)/上年同期发展水平 *100%环比:(本期 ...

什么是同环比

同比:同比是当年同一时间的数据和上年同一时间的数据的对比行为。

环比:环比是将本期数据与上期数据对比的行为。


计算公式

同比:(本期发展水平-上年同期发展水平)/上年同期发展水平 *100%

环比:(本期统计周期数据-上期统计周期数据)/上期统计周期数据*100%


如何在Mysql中计算同比和环比呢


Mysql中数据的准备


新建数据表并且像数据表中插入数据,如下:


CREATE TABLE product  (`ID` varchar(20) NOT NULL,`名称` varchar(20) ,`单价` int (10))

INSERT INTO product VALUES ('1001','A',45);

INSERT INTO product VALUES ('1002','B',52);

INSERT INTO product VALUES ('1003','C',39);


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


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 ('1001', 15, '2020-06-01 10:10:12');

INSERT INTO sales(`ID`,`数量`,`时间`)  VALUES ('1002',26, '2020-05-02 0:10:12');

INSERT INTO sales (`ID`,`数量`,`时间`) VALUES ('1003', 21, '2020-04-03 0:10:12');

INSERT INTO sales (`ID`,`数量`,`时间`) VALUES ('1003', 23, '2020-04-04 0:10:12');

INSERT INTO sales (`ID`,`数量`,`时间`) VALUES ('1003', 0, '2020-03-05 0:10:12');

INSERT INTO sales (`ID`,`数量`,`时间`) VALUES ('1001', 16, '2020-02-06 3:0:12');

INSERT INTO sales (`ID`,`数量`,`时间`) VALUES ('1002', 32, '2020-01-07 0:10:12');

INSERT INTO sales (`ID`,`数量`,`时间`) VALUES ('1001', 16, '2019-12-08 0:12:24');

INSERT INTO sales (`ID`,`数量`,`时间`) VALUES ('1001', 32, '2019-06-09  0:12:24');

INSERT INTO sales (`ID`,`数量`,`时间`) VALUES ('1002', 17, '2019-05-09 0:12:24');


同环比计算语句


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 c

left 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 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


主要函数解释


Concat含义:将多个字符串连接成一个字符串。

Concat语法:concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

Abs含义:函数用于获取给定数字的绝对值

Abs语法:selectabs(num); 参数: num: 取绝对值的个数

Round含义:用于数据的四舍五入

Round语法:round(x,d) ,x指要处理的数,d是指保留几位小数 这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0

评论
1973人参与,1条评论

精彩评论

查看全部评论>>

32 文章910 人气
数据分析
热门问答
  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部