什么是同环比同比:同比是当年同一时间的数据和上年同一时间的数据的对比行为。环比:环比是将本期数据与上期数据对比的行为。计算公式同比:(本期发展水平-上年同期发展水平)/上年同期发展水平 *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(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。 Abs含义:函数用于获取给定数字的绝对值 Abs语法:selectabs(num); 参数: num: 取绝对值的个数 Round含义:用于数据的四舍五入 Round语法:round(x,d) ,x指要处理的数,d是指保留几位小数 这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0 |
2024-02-29
2024-01-22
2024-01-03
2023-12-27
2023-12-08
回答
回答
回答
回答
回答
1