快速计算环比数据(怎么简单实现同比)
快速计算环比数据(怎么简单实现同比)
2024-11-22 06:08:54  作者:连干你  网址: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-11-22汆牛肉的做法1、原料:牛里脊肉200克;配料:香菜2根、金针菇100克、腌酸菜100克2、调料:食用油、盐、花椒、干辣椒、胡椒粉、味精、葱、姜、小苏打1克、水淀粉、糖3、牛里脊一块,洗净待用4、切成薄片,加料酒、。
  • 番茄的种植(番茄怎么种植)
  • 2024-11-22番茄怎么种植播期:番茄一般要在一二月的时候种植,或者在七八月的时候种;夏天种的话,因为温度比较高的原因,所以番茄发育不是很好,根茎小,而且有很多的花朵,果实也难以结出来;冬季播种这种只适合低海拔丘陵地区或南方平原。
  • 休杰克曼歌舞预告片(休杰克曼配音动画遗失的环节中文预告曝光)
  • 2024-11-22休杰克曼配音动画遗失的环节中文预告曝光莱卡工作室的第五部定格动画作品《遗失的环节》已在北美上映,最新版中字预告近日曝光,该片由休·杰克曼、佐伊·索尔达娜、扎克·加利费安纳基斯,斯蒂芬·弗雷、艾玛·汤普森等献声主要角色本片讲述传奇冒险家佛洛。
  • 吃喝拉撒还闹腾(吃喝拉撒无小事)
  • 2024-11-22吃喝拉撒无小事小班有个叫娜娜的小朋友,比班级中多数孩子都大一些,但她的自理能力却很差她在进餐时不能正确使用小勺,总是泼撒饭粒,午睡时不会自己穿脱衣服、鞋子,大便后不会自己擦屁股于是我只好一次次对她进行指导与帮助通过。
  • 关于牛郎织女的所有故事(关于牛郎织女爱情故事的记载这里最全)
  • 2024-11-22关于牛郎织女爱情故事的记载这里最全一,天河之东有织女,天帝之女也,年年机杼劳役,织成云锦天衣,容貌不暇整天帝怜其独处,许嫁河西牵牛郎,嫁后遂废织衽天帝怒,责令归河东,许一年一度相会涉秋七日,鹊首无故皆髡,相传是日河鼓与织女会于河东,役。
  • 推荐过年和家人一起追的剧(5部科幻爱情小众好剧)
  • 2024-11-225部科幻爱情小众好剧#娱兔迎春#小精怪们晚早上好鸭春节假期如约而至今天就聊点轻松的给大家推荐一波有趣的科幻/爱情剧春节宅家想刷剧的时候就不需要浪费搜索的时间直接马了追起来吧~《菲利普·迪克的电子梦》如果你也和我一样喜欢科。
  • 酸甜凉拌猪肝的做法
  • 2024-11-22酸甜凉拌猪肝的做法食材清单猪肝适量、香葱适量、蒜末适量、辣椒油适量、麻油适量、白糖适量勺、陈醋适量、酱油适量、料酒适量烹饪步骤1/5把生猪肝切成小块,这样易熟,锅内加水,冷水下锅煮,锅中可以放点姜片,料酒去腥,重点是一。
  • 芦荟的养殖方法及注意事项 芦荟的养殖方法与用法大全
  • 2024-11-22芦荟的养殖方法及注意事项 芦荟的养殖方法与用法大全导读芦荟属(学名:Aloe)通称芦荟,原产于地中海、非洲,为独尾草科多年生草本植物,据考证的野生芦荟品种300多种,主要分布于非洲等地这种植物颇受大众喜爱,主要因其易于栽种,为花叶兼备的观赏植物可食用。
  • 受孕卵着床后身体会有什么感觉(受精卵着床成功后)
  • 2024-11-22受精卵着床成功后众所周知,精子与卵子的结合才能形成受精卵,但是受精之后不代表就成功,受精卵着床才能成功怀孕一般来说,受精后约第6-8天开始着床,至第11-12天完成着床,是胎生哺乳类动物的胚泡和母体子宫壁结合的过程胚。
  • 相逢时节简宏成说出陈昕儿真相(相逢时节结局宁恕收获爱情)
  • 2024-11-22相逢时节结局宁恕收获爱情文/岩姐,原创内容,抄袭必究!任何故事,不管以什么形式开场,最终都会落幕正如都市情感剧《相逢时节》中,崔家和简家两家人的恩怨,终究放下,过了一代又一代的人,他们渐渐忘记仇恨,过属于自己的安稳日子崔启明。
  • 大蒜用复合肥好还是用尿素好(用尿素好还是复合肥好)
  • 2024-11-22用尿素好还是复合肥好大蒜在国内很多地区都有种植,是一种经济效益比较高的作物,但大蒜的种植管理也不简单,尤其是在水肥管理一块,对产量的影响很大那么接下来我们就聊一聊,大蒜年后追肥,选择尿素好还是复合肥好?先了解尿素和复合肥。