快速计算环比数据(怎么简单实现同比)
快速计算环比数据(怎么简单实现同比)
2024-11-06 01:57:34  作者:连干你  网址:https://m.xinb2b.cn/sport/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分析工具来处理是再合适不过的了。


  • 骑行路上一部西部风情的公路大片(不妨看看这10部骑行电影吧)
  • 2024-11-06不妨看看这10部骑行电影吧又周末了,而且天也变冷了,越来越多的车友放弃骑车了,那么,就在家看电影好了,今天我们来讲讲关于自行车的电影不看不知道,一找吓一跳,原来被大家忽视已久的华语电影里居然还有这么多好看的自行车电影啊~!1、。
  • 张辅最后的结局解密(四朝重臣张辅的堂哥)
  • 2024-11-06四朝重臣张辅的堂哥张信是明朝前中期的一个大臣,同时也是靖难功臣张玉的从子,四朝重臣张辅的堂哥他在建文二年的时候,成功通过科举考试,取得了乡试第一的好成绩等到了朱棣当上了永乐皇帝之后,凭借着自身的才华,以及同张玉之间的亲。
  • iqoo8目前值得入手吗?这款性能小钢炮能否冲击史上最畅销新机
  • 2024-11-06iqoo8目前值得入手吗?这款性能小钢炮能否冲击史上最畅销新机前段时间iQOO举行了新品发布会,正式发布了iQOO8系列两款新机,在用户群体当中引发了新一轮的讨论,往后几天iQOO8将要正式开售了,今天我们就一起来复盘一下这款被称为性能小钢炮的旗舰新机吧!iQO。
  • 到底有没有偏方治脚气(这些脚气偏方不可信)
  • 2024-11-06这些脚气偏方不可信听说“民间偏方”向来是江湖一大杀器,警惕了,偏方也有跑偏的时候!信了下面这些偏方,脚痒、脱皮、水疱还会找上门来,一不小心甚至有更严重的后果!怎样科学治疗脚气?后文为你支妙招~偏方1:牙膏治脚气辟谣:脚。
  • 小学生如何背古诗有什么好处(为什么要让孩子多读古诗)
  • 2024-11-06为什么要让孩子多读古诗文|弦歌缓缓北京某中学高三老师少年商学院国际教育专栏作者中秋前,我在朋友圈看到了一个小视频视频的作者,是知乎母婴领域的优秀回答者@七优老师身为全国优秀班主任的七优老师同我一样,也是一位语文老师同时,她。
  • 自荐书从几方面写(应该做到八要八忌)
  • 2024-11-06应该做到八要八忌要写好自荐书,应该做到八要八忌:1、要凝炼精干,忌长篇大论;精炼的文风反映一个人干炼的作用,如果你的自荐洋洋洒洒,长篇大论,辞不达意,招聘主管不仅看不下去,而且会得出你这个人不干炼的结论2、要充分展示。
  • 怎么观察宝宝发烧(如何从容应对宝宝成长路上的发烧)
  • 2024-11-06如何从容应对宝宝成长路上的发烧亲爱的读者朋友们,阅读前请点击右上角的“关注”,就可以每天获取专业的孩子成长教育、身体及心理健康相关知识!程医生育儿经——专注孩子健康、成长教育Q1宝宝成长路上为什么会频繁发烧?发烧是宝宝成长过程中不。
  • 大厨教你做好豆腐(家常豆腐怎么做才好吃)
  • 2024-11-06家常豆腐怎么做才好吃大家好,我是第一美食的阿飞,关注阿飞,有更多的家常美食供大家参考豆腐可以说是公认的一道营养食品,也是在百姓餐桌上的常客,豆腐本事就是一道美食,有一股很浓的豆香味,不管是红烧还是做汤都是非常的美味,而且。
  • 孩子总是哭闹不可理喻 孩子哭闹伤脑筋
  • 2024-11-06孩子总是哭闹不可理喻 孩子哭闹伤脑筋儿子小时候,常常因为找不到玩具而大哭,有时是小汽车,有时是图画书,有时是变形金刚的零件……每当这时候,无论是拿出新玩具转移注意力,还是用好吃的诱惑,他依然我行我素,沉浸在哭闹的世界中,怎么哄都哄不住,。
  • 大众suv新款途昂旗舰版配置(车长5米1叫板途昂)
  • 2024-11-06车长5米1叫板途昂如今在高端市场,不仅是产品力,品牌也相当的重要,比如在合资高端SUV市场,如今仅丰田和大众能够撑住排面,其余品牌即使是能够有很好的产品,但最多也就是两三千台的销量,很难像汉兰达,途昂这样保持万台水准不。
  • 葱油酥排饼怎么做
  • 2024-11-06葱油酥排饼怎么做这道简易版的葱油酥饼,加入了猪油后酥脆咸香的口感很不错的早上起来先和面,静置20分钟后再做,一会儿就搞定,再配上一碗粥,好吃营养的早餐解决了主料1种中筋面粉的做法大全中筋面粉250g辅料2种清水130。