返回顶部
首页 > 资讯 > 数据库 >MySQL中如何计算同比和环比
  • 926
分享到

MySQL中如何计算同比和环比

mysql计算同比和环比怎么算mysql 同比环比mysql 同比 2022-06-22 21:06:24 926人浏览 独家记忆
摘要

目录前言我们先来看看什么是同比,什么是环比:那同比增长率和环比增长率又如何计算呢:同比和环比的区别在Mysql中如何计算同比和环比数据准备计算同比和环比sql解析总结前言 今天在做数据建模的时候,ads层的需求中有个叫同

前言

今天在做数据建模的时候,ads层的需求中有个叫同比和环比的指标,这两指标的计算之前都没有接触过,经过我两三个小时的研究,终于搞明白什么是同比,什么是环比,如何使用mysql来计算同比和环比。

我们先来看看什么是同比,什么是环比:

同比:通常是指今年第n月与去年第n月相比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。

环比:通常是指表示连续2个单位周期(比如连续两月)内的量的变化比。环比包括两种:环比增长速度和环比发展速度。

那同比增长率和环比增长率又如何计算呢:

同比增长率:

同 比 增 长 率 = ( 本 期 数 − 同 期 数 ) / 同 期 数 ∗ 100 % 

环比增长率:

环 比 增 长 率 = ( 本 期 数 − 上 期 数 ) / 上 期 数 × 100 % 

同比和环比的区别

  • 同比是本期与同期做对比,环比是本期与上期做对比。
  • 环比一般是用在月、日很少用在年上,主要是对比很短时间内涨幅程度,不过由于行业差异,比如旅游,会受到淡旺季影响。
  • 同比一般用在相邻两年,相同时间段内,查看涨幅程度,一般用在两年相同月份,很少用在两月相同日期。

在MySQL中如何计算同比和环比

数据准备

创建商品表并向商品表中添加数据

CREATE TABLE product  (
  `产品ID` varchar(20) NOT NULL,
	  `产品名称` varchar(20) ,
  `产品单价` int (10)
)
INSERT INTO product VALUES ('C1001','产品A',45);
INSERT INTO product VALUES ('C1002','产品B',52);
INSERT INTO product VALUES ('C1003','产品C',39);

image-20220317095350813

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

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 ('C1001', 15, '2020-06-01 10:10:12');
INSERT INTO sales(`产品ID`,`销售数量`,`销售时间`)  VALUES ('C1002',26, '2020-05-02 0:10:12');
INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 21, '2020-04-03 0:10:12');
INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 23, '2020-04-04 0:10:12');
INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 0, '2020-03-05 0:10:12');
INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 16, '2020-02-06 3:0:12');
INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1002', 32, '2020-01-07 0:10:12');
INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 16, '2019-12-08 0:12:24');
INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 32, '2019-06-09  0:12:24');
INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1002', 17, '2019-05-09 0:12:24');

image-20220317121540101

计算同比和环比

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

sql解析

select  year(c.销售时间) yy,month(c.销售时间) mm,     
       sum(c.销售数量*d.产品单价) ss,
 
# concat函数,mysql字符串拼接,因为同比和环比都是百分数
# ifnull函数,mysql判断字段是否为空,为空则为0
# abs函数,mysql取绝对值,因为我这里取的都是正数
# round函数,mysql保留几位小数
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
          # 同比月份相同,年份减1
          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

结果:

image-20220317121641787

除此之外,还想要计算累计销售的话,可以这样写:

select year(销售时间) yy,month(销售时间) mm,
sum(销售数量*b.产品单价) over(order by year(销售时间) ,month(销售时间) ) 累计数量 
from sales a
left join product b on a.产品ID=b.产品ID
order by  yy,mm

同比和环比这块的确不好计算

总结

到此这篇关于MySQL中如何计算同比和环比的文章就介绍到这了,更多相关MySQL计算同比和环比内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中如何计算同比和环比

本文链接: https://lsjlt.com/news/33011.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL中如何计算同比和环比
    目录前言我们先来看看什么是同比,什么是环比:那同比增长率和环比增长率又如何计算呢:同比和环比的区别在mysql中如何计算同比和环比数据准备计算同比和环比sql解析总结前言 今天在做数据建模的时候,ads层的需求中有个叫同...
    99+
    2022-06-22
    mysql计算同比和环比怎么算 mysql 同比环比 mysql 同比
  • MySQL中怎么计算同比和环比
    这篇文章主要介绍“MySQL中怎么计算同比和环比”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中怎么计算同比和环比”文章能帮助大家解决问题。我们先来看看什么是同比,什么是环比:同比:通常是...
    99+
    2023-07-02
  • pandas如何计算同比环比增长
    目录计算同比环比增长问题描述数据准备计算环比增长计算同比增长同比和环比计算公式计算同比环比增长 问题描述 我有2017.1-2018.12的销售数据,计算每一个月的 同比和环比增长,...
    99+
    2024-04-02
  • 使用pandas计算环比和同比的方法实例
    目录前言1.数据准备2.环比计算3.同比计算4.关于pct_change()函数5.后记前言 在进行业务数据分析时,往往需要使用pandas计算环比、同比及增长率等指标,为了能够更加...
    99+
    2024-04-02
  • java 如何计算同比增长工具类
    java 计算同比增长工具类 为了数据的严谨性,统一装换为BigDecimal,话不多说,看代码。 package com.pig4cloud.pigx.admin.api.ut...
    99+
    2024-04-02
  • mysql计算环比的方法(多种情况)
    整理不易,转发请注明出处,请勿直接剽窃! 点赞、关注、不迷路! 摘要: 历史、当前月环比 公式:环比=(本月-上月)/上月 历史月环比(适用于计算历史每个月的环比) select (a...
    99+
    2023-09-30
    mysql 数据库 sql
  • Python中怎么计算环比增长率
    Python中怎么计算环比增长率,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 认识环比增长率很多企业比较注重自己的业务增长情况,时常会需要计算同比增...
    99+
    2023-06-16
  • sql如何计算百分比
    有三种主要方法可以利用 sql 计算百分比:直接计算、使用窗口函数以及使用 case 表达式。直接计算通过将分子除以分母并乘以 100 获得百分比;窗口函数允许根据组按分母值计算百分比;...
    99+
    2024-06-06
  • Pandas常用累计、同比、环比等统计方法实践过程
    目录1.(本年)累计2.(上年)同期累计3. 上月(完成)4. 同比(增长率)5. 环比(增长率)6. 总结统计表中常常以本年累计、上年同期(累计)、当期(例如当月)完成、上月完成为...
    99+
    2024-04-02
  • java怎么计算同比增长工具类
    本篇内容主要讲解“java怎么计算同比增长工具类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么计算同比增长工具类”吧!java 计算同比增长工具类为了数据的严谨性,统一装换为BigD...
    99+
    2023-06-20
  • mysql如何实现比较运算
    这篇文章将为大家详细讲解有关mysql如何实现比较运算,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL按照以下规则进行数值比较:若有一个或两个参数为 NULL,除...
    99+
    2024-04-02
  • MySQL计算百分比方法介绍
    根据相应条件抽出相应count数(myCount)抽出总count数(totalCount)计算百分比:myCount / totalCount * 100四舍五入:使用ROUND函数ROUND(numbe...
    99+
    2024-04-02
  • 编程算法中,Python和Spring如何比较?
    编程算法是计算机科学中的一个重要领域,它涉及到数据结构、算法和计算机程序设计等多个方面。Python和Spring都是编程中常用的工具,Python是一种高级编程语言,而Spring则是一个Java开发框架。这两个工具都有各自的优点和缺点...
    99+
    2023-07-02
    leetcode 编程算法 spring
  • 中文文本长度计算的异同:lenb函数和len函数的比较
    lenb函数和len函数对于中文文本长度计算的异同点,需要具体代码示例 【引言】在使用编程语言处理中文文本时,我们经常要计算文本的长度。在Python中,常用的计算文本长度的函数有len和lenb。这两个函数在处理中文文本时有一...
    99+
    2024-01-29
  • excel如何算百分比
    这篇文章主要介绍“excel如何算百分比”,在日常操作中,相信很多人在excel如何算百分比问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”excel如何算百分比”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-02
  • MySQL 中的比较运算符如何处理日期值?
    日期之间的比较运算符将以合乎逻辑的方式工作。在下面的示例中,在比较两个日期时,MySQL 只是比较两个数字或字符串 -mysql> select 20171027 < 20150825; +-------------------...
    99+
    2023-10-22
  • mysql中常用日期比较与计算函数有哪些
    这篇文章给大家分享的是有关mysql中常用日期比较与计算函数有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySql中时间比较的实现unix_...
    99+
    2024-04-02
  • 比较和选择MySQL不同类型的锁
    MySQL 是一种常用的关系型数据库管理系统,广泛应用于各种类型的应用程序中。在多用户并发访问数据库的情况下,为了保证数据的一致性和完整性,我们经常需要使用锁来控制并发访问的操作。MySQL 提供了多种类型的锁,包括表级锁和行级锁。不同类型...
    99+
    2023-12-21
    查询优化 事务处理 并发控制
  • Java和Python中for循环的比较
    Java是强类型的语言,而python是弱类型的语言。先看Java中的for循环使用,如下图: package test06; public class Fortest { public static void main(Str...
    99+
    2023-01-31
    Java Python
  • 如何进行equals()方法和==异同的比较
    如何进行equals()方法和==异同的比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。equals()方法是Object类的方法,所有的类都集成了此方法,还...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作