快速计算环比数据(怎么简单实现同比)
快速计算环比数据(怎么简单实现同比)
2024-09-28 04:23:59  作者:连干你  网址:https://m.xinb2b.cn/life/xxd233957.html

在做数据分析时,我们会经常听到同比、环比的概念。各个企业和组织在发布统计数据时,通常喜欢用同比、环比来和之前的历史数据进行比较,用来说明数据的变化情况。例如,统计局公布2022年1月份CPI同比增长0.9%,环比增长0.6%。

实际在基于数据库的数据分析场景中,环比和同比是典型的复杂计算场景之一,特别是在Oracle等商业数据库的分析函数出现之前。以MySQL为例,在8.0版本中才引入了Lag和Lead函数,这两个函数结合开窗函数有效提高了同比、环比等复杂运算的实现效率。在5.x系列版本中,MySQL需要依赖多次嵌套子查询和自关联才能实现此类计算。

我们以一个简单的例子,来分别看下,MySql 5.x和8.0是具体实现同比、环比计算的。

示例数据见表:

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


1、MySQL 5.x:通过子查询和关联实现同比和占比计算

以按年月统计不同年份的销售总值,并计算环比(销售总额同比上期)、同比(销售总额同比去年同期)为例。


示例表结构和数据

通过SQL计算环比和同比:

select year(c.销售时间) yy,month(c.销售时间) mm,concat(ifnull(abs(round((sum(c.销售数量)-ss1)/ss1*100,2)),0),'%') 同比,concat(ifnull(abs(round((sum(c.销售数量)-ss2)/ss2*100,2)),0),'%') 环比from sales cleft join (select month(a.销售时间) mm1,year(a.销售时间) yy1,sum(a.销售数量) ss1from sales aGROUP BY mm1,yy1) aon month(c.销售时间) = a.mm1and a.yy1 = year(c.销售时间)-1left join (select month(a.销售时间) mm2,year(a.销售时间) yy2,sum(a.销售数量) ss2from sales aGROUP BY mm2,yy2) bon (b.yy2 = year(c.销售时间) and b.mm2 1 = month(c.销售时间) OR (yy2=year(c.销售时间)-1AND b.mm2 = 12 AND month(c.销售时间) = 1))group by yy, mmorder by yy,mm asc

计算结果:


2、MySQL 8.0:通过分析函数实现同比和占比计算

MySql8.0支持了Lead和Lag分析函数,虽然可以大幅提高同、环比计算的效率,但仍然需要编写SQL语句处理。

2.1计算同比:

select t2.年份,t2.月份,concat(round((t2.数量-t1.数量)/t1.数量,2)*100,'%') as 同比 from (SELECt year(销售时间) as 年份,month(销售时间) as 月份,sum(销售数量) as 数量 from salesgroup by year(销售时间),month(销售时间) order by year(销售时间) desc, month(销售时间) desc) t1,(SELECt year(销售时间) as 年份,month(销售时间) as 月份,sum(销售数量) as 数量 from salesgroup by year(销售时间),month(销售时间) order by year(销售时间) desc, month(销售时间) desc) t2 where t1.年份=t2.年份-1 and t1.月份=t2.月份


2.2计算环比:

SELECtmm,CONCAt(ROUND(IFNULL((xl - first_xl) / first_xl * 100,2),0),'%') AS 环比FROM(SELECtmm,xl,lead (xl, 1) over (ORDER BY mm DESC) AS first_xlFROM(SELECtDATE_FORMAT(销售时间, '%Y-%m') AS mm,sum(销售数量) AS xlFROMsalesGROUP BYDATE_FORMAT(销售时间, '%Y-%m')) t) a


在SqlServer2008R2和Oracle10g之后,都提供了Lag和Lead分析函数。具体的计算逻辑和用法与上述MySQL8.0类似。

3、使用BI工具的计算引擎

针对此类复杂的计算场景,商业智能BI数据分析工具提供了更加高效的解决方案。以Wyn Enterprise嵌入式商业智能软件为例,其内置的wax分析表达式和快速计算引擎,提供直接实现同比、环比等复杂计算的能力,而不再需要写复杂冗长的SQL。

3.1 使用内置的同比、环比快速计算功能

同比、环比等计算一般是BI工具的标准功能,我们可以直接通过设置实现。



3.2 使用数据分析表达式

如果内置快速计算无法满足要求,还可以通过分析表达式实现更复杂的计算。分析表达式是一种更加灵活、强大的数据计算方式,通过丰富的函数,用户可以像Excel公式一样自由组合,实现更加强大的分析能力。分析表达式基于数据模型进行业务计算,以一些定义好的函数运用正确的语法来完成某个复杂的业务逻辑计算。这样可以使用户更灵活地使用数据,最大限度的利用数据。




通过对比SQL和BI数据分析工具在处理同比、环比等复杂计算中的差异,我们可以发现,还是专业的工具在数据计算和处理能力上要更加便捷。以后在工作中,如果有类似的分析计算需求,选择BI分析工具来处理是再合适不过的了。


  • 扶摇阮经天演的叫啥(扶摇阮经天配音是谁)
  • 2024-09-28扶摇阮经天配音是谁电视剧扶摇昨天曝光了片花,感觉和小说剧情都不太相同了,阮经天饰演的长孙无极还是帅的,只不过剧中阮经天并不是自己的原声,那么扶摇阮经天配音是谁?带来马正阳个人资料介绍扶摇阮经天配音是谁扶摇皇后阮经天饰演。
  • 灵剑尊小狐狸(灵剑尊小魂要被强买)
  • 2024-09-28灵剑尊小魂要被强买国漫《灵剑尊》上次更新到洛云和水流香在柳家杀人立威后,柳家主忍了下来随后洛云发现柳诗韵独自在屋顶吹奏长笛,便走了过去来自柳诗韵的试探柳诗韵看见洛云走来,停下了笛声,试探洛云是否和黑山有仇,洛云连忙否认。
  • 刘德华坠马伤愈立即现身(刘德华坠马第18天再写亲笔信)
  • 2024-09-28刘德华坠马第18天再写亲笔信刘德华1月17日在泰国拍广告时,意外坠马受伤,造成盆骨撕裂,返港一直入住养和医院休养经医生诊治后,华仔必须休养6到9个月的时间,身体才会康复虽然暂时需要住在医院,但刘德华依然坚持在官网里面,亲自写信向。
  • 男生用脱毛膏会越来越多吗(男子网购面部脱毛膏)
  • 2024-09-28男子网购面部脱毛膏近日,壹粉张先生在齐鲁晚报·齐鲁壹点@记者反映,自己在网上购买的男士面部脱毛套装,使用后脸上有灼烧感,第二天出现了红肿,脸部破相他发现该网店的差评留言中,有多位购买者也有类似遭遇,质疑产品的质量在国家。
  • 53岁光头强被逼现出原形(52岁光头强人气散尽)
  • 2024-09-2852岁光头强人气散尽像我们现在的生活,每天都离不开手机,平时有事没事就喜欢拿着手机把玩,这也让大家对手机的依赖性越来越强,出门更是随身携带手机,而且现在各方面都推出了线上服务,包括线上收款,确实使我们的生活更加便利,但这。
  • 三层别墅带车库带旋转楼梯(三层复式带旋转楼梯别墅)
  • 2024-09-28三层复式带旋转楼梯别墅农村建房,每家的宅基地大小都不一样,有小就有大,现在基本上建欧式房子得比较多,但是很多房子又千篇一律,也不是那么实用,今天就介绍一款很不一样又实用得房子给你们看看编号:DC1018层数:三层结构形式:。
  • 圆桌派最新一期的嘉宾(看完这期圆桌派)
  • 2024-09-28看完这期圆桌派咱们今天不聊电影,聊玄学是的,你没看错,就是玄学读完本文,你或将收获人生的财富密码、开启智能超脑的万能钥匙事情要从第五季《圆桌派》开始这个国民谈话类节目曾经凭借姜文、王晶、蒋雯丽等一众大咖的金句频频刷。
  • 四川老坎爆笑方言(四川方言胡华强)
  • 2024-09-28四川方言胡华强文/胡华强“老孃儿”是成都及其周边地区称呼老婆的专属方言初到成都,时时听到身边有人在说“我老孃儿我老孃儿”,我以为那“老孃儿”真的好老,结果发现很多“老孃儿”还年轻得像小姑娘,这才知道成都人口中的“老。
  • 单方的聊天记录可以算是证据吗(普法用聊天记录当证据)
  • 2024-09-28普法用聊天记录当证据随着互联网时代的发展电子证据早已从原先审判实践中的“边角料”变成现在的“主角”微信聊天记录、支付软件的转账记录也已成为名正言顺的电子证据Q:用聊天记录当证据对方改了微信号怎么证明他是他?值得注意的是,。
  • 江南一大美人(苏杭运河边上的那些江南女子)
  • 2024-09-28苏杭运河边上的那些江南女子“上有天堂,下有苏杭”,“苏杭美女甲天下”都是我们耳熟能详的句子而苏杭的兴旺发达,于苏杭大运河是分不开的苏杭运河是京杭运河的最南段,其北端是苏州吴门桥,南端是杭州拱宸桥,两桥间的距离151公里,这里也。
  • 旧冰箱可以平躺拉走吗
  • 2024-09-28旧冰箱可以平躺拉走吗不可以1、搬运冰箱时,最大倾斜角度不能超过45度(与垂直方向直接的夹角),以免造成制冷系统故障,影响正常使用2、不过,不建议你经常搬动冰箱,频繁搬动会影响冰箱质量及寿命。
  • 荷兰弟真的好可爱(荷兰弟的3个弟弟太可爱)
  • 2024-09-28荷兰弟的3个弟弟太可爱圣诞节当天,在漫威电影宇宙中扮演“蜘蛛侠”的汤姆·赫兰德在社交平台上晒出3个弟弟的照片,送上新图庆祝圣诞在“荷兰弟”汤姆·赫兰德晒出的照片中,三个弟弟和他长得实在太相似,尤其是几兄弟的鼻子一模一样,网。