精华内容
下载资源
问答
  • 同比环比计算

    2020-08-03 15:37:59
    1.同比环比的区别意义 1.1区别 同比:本期与同期做对比。例如 有当前月份的数据,获取上一年相同月份的数据进行比较 环比:本期与上期做对比。例如 有当前月份的数据,获取本年上月的数据进行比较 1.2意义 同比和...

    1.同比环比的区别和意义

    1.1区别

    同比:本期与同期做对比。例如 有当前月份的数据,获取上一年相同月份的数据进行比较

    环比:本期与上期做对比。例如 有当前月份的数据,获取本年上月的数据进行比较

    1.2意义

    同比和环比用于表示某一事物在对比时期内发展变化的方向和程度,以财务盈利为例,同比和环比可以反应企业当前的盈利情况,对比上月和去年是否上升还是下降

    2.同比环比实现代码

    SELECT CWBB_ZBBH 
          ,CQJ
          ,NLRZE_DQ
          ,LAG(NLRZE_DQ, 1, 0) OVER(PARTITION BY CWBB_ZBBH ORDER BY CQJ) AS NZYSR_HB-- 环比分析,与上个月份进行比较
          ,LAG(NLRZE_DQ, 12, 0) OVER(PARTITION BY CWBB_ZBBH ORDER BY CQJ) AS NZYSR_TB-- 同比分析,与上个年度相同月份进行比较   
      FROM DW_CW_CWBBZB
    

    环比分析是通过窗口函数的lag() over()先实现按照分析维度进行分组,按照日期进行排序,然后lag去拉去上一行的数据。
    同比分析是通过窗口函数的lag() over()先实现按照分析维度进行分组,按照日期进行排序,然后lag去拉去当前年月前12行的数据

    展开全文
  • 同比环比

    2021-02-18 14:03:28
    同比环比一、同比和环比是什么意思?二、同比和环比的计算公式是什么?三、同比和环比的区别是什么?四、补充 同比是指上年同期,环比是指本年上期 举例来说,2009.9月,同比是与2008.9月比,环比是与2009.8月比。...

    同比是指上年同期,环比是指本年上期

    举例来说,2009.9月,同比是与2008.9月比,环比是与2009.8月比。

    一、同比和环比是什么意思?

    1、同比:一般情况下是今年第n月与去年第n月比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。如,本期2月比去年2月,本期6月比去年6月等。

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

    二、同比和环比的计算公式是什么?

    1、同比发展速度的公式:
    同比发展速度=本期发展水平/去年同期水平×100%
    同比增长速度=(本期发展水平-去年同期水平)/去年同期水平×100%
    在实际工作中,经常使用这个指标,如某年、某季、某月与上年同期对比计算的发展速度,就是同比发展速度。

    2、环比发展速度的公式:
    环比增长率=(本期数-上期数)/上期数×100%
    同比增长率=(本期数-同期数)/|同期数|×100%
    环比发展速度,一般是指报告期水平与前一时期水平之比,表明现象逐期的发展速度。

    三、同比和环比的区别是什么?

    1、同比是本期与同期做对比,环比是本期与上期做对比。

    2、环比一般是用在月、日很少用在年上,主要是对比很短时间内涨幅程度,不过由于行业差异,比如旅游,会受到淡旺季影响。

    3、同比一般用在相邻两年,相同时间段内,查看涨幅程度,一般用在两年相同月份,很少用在两月相同日期。

    四、补充

    同比:是今年的某个阶段与去年的相同时段比较,适用于观察某个指标在不同年度的变化

    • 优势是可以去除大多数业务的季节因素,比如招聘,2月是淡季,3月是旺季,做3月的分析时用环比实际上体现出的是招聘市场的变化,而不是公司销售额的变化,用同比则可以看出今年的增长情况;
    • 劣势是灵活性较低,因为同比大多数以年为单位(否则就达不到去除季节因素的目标),不能反映出数据的短期大量变化。

    环比:是某个阶段与其上一个时长相等的阶段做比较,比如上周和本周,上月和本月,上季度和本季度等等,用于表示数据的连续变化趋势

    • 优势是对于高速增长型业务,能非常好的体现出业务的增长趋势和事件的影响(典型如新开网站流量,UV第一周100,第二周300,第三周500,第四周做了个活动,2000,第五周1000,那么前三周网站的用户增长趋势很好,第四周数据有个突增,能看到活动带来的增长是很明显的);
    • 劣势是光看数字难以排除季节性因素,且对于稳定波动型数据(例如部门人数,每月有进有出,一年内的走势不明确,但部门规模又逐年扩大)来说,趋势不明显,环比意义相对小。
    展开全文
  • 同比和环比的计算

    2014-08-15 19:45:00
    相关公式如下:1、同比增长率计算公式(当年值-上年值)/上年值x100 = 增长率%2、逆运算: a) 已知当年值,和同比增长率这两个参数,求上年值?当年值/(1+增长率%)=上年值3、逆运算: b) 已知上年值,和同比增长率这两个...
    与上年度数据对比称"同比",与上月数据对比称"环比"

    相关公式如下:
    1、同比增长率计算公式
    (当年值-上年值)/上年值x100 = 增长率%
    2、逆运算: a) 已知当年值,和同比增长率这两个参数,求上年值?
    当年值/(1+增长率%)=上年值
    3、逆运算: b) 已知上年值,和同比增长率这两个参数,求当年值?
    上年值x(1+增长率%)=当年值

    环比以此类推。
    展开全文
  • MySQL计算环比同比(年、月、季度) 环比 所谓“环比”即连续2个单位周期(比如连续两月)内的量的变化比。如今年8月比今年7月。...所谓“同比”即同期比较,可以是本年度与上年度,也可以是上...

    MySQL计算环比、同比(年、月、季度)

    环比

    所谓“环比”即连续2个单位周期(比如连续两月)内的量的变化比。如今年8月比今年7月。 当然这里的单位不一定是月,可以是任何时间单位。

    环比增长率=(本期数-上期数)/上期数×100%。
    反映本期比上期增长了多少;环比发展速度,一般是指报告期水平与前一时期水平之比,表明现象逐期的发展速度。

    同比

    所谓“同比”即同期比较,可以是本年度与上年度,也可以是上年同一个月份或季度与本年同期。
    同比增长率=(本期数-同期数)/|同期数|×100%。

    案例

    年月统计不同年份的销售总值,并计算环比(销售总额同比上期)、同比(销售总额同比去年同期)
    在这里插入图片描述

    查询订单销售表结构

    CREATE TABLE `food_orders_info` (
      `id` varchar(36) NOT NULL COMMENT '主键id',
      `pid` varchar(36) NOT NULL COMMENT '主订单id',
      `order_no` varchar(30) NOT NULL COMMENT '订单号生成规则 3大写英文-时间戳-3随机码(ZXC-201906241558-SX2)',
      `merchant_id` varchar(36) NOT NULL COMMENT '订单归属的经销商id',
      `buyer_id` varchar(36) NOT NULL COMMENT '买家id',
      `buyer_name` varchar(100) NOT NULL COMMENT '买家名称',
      `order_money` decimal(10,2) NOT NULL COMMENT '订单金额',
      `out_stock_money` decimal(10,2) DEFAULT NULL COMMENT '出库金额',
      `freight_money` decimal(10,2) NOT NULL COMMENT '运费',
      `driver_id` varchar(36) DEFAULT NULL COMMENT '司机id',
      `driver_name` varchar(36) DEFAULT NULL COMMENT '司机名称',
      `payment_state` bit(1) NOT NULL DEFAULT b'0' COMMENT '支付状态(0=未支付,1=已支付)',
      `payment_type` varchar(20) DEFAULT NULL COMMENT '支付方式(支付宝,微信,xx银行),预留字段暂不填写',
      `order_state` varchar(10) NOT NULL COMMENT '订单状态(00=预约单,10=待分拣,20=分拣中,30=待配送,40=配送中,50=待确认,60=已完成)',
      `abnormal_state` bit(1) NOT NULL DEFAULT b'1' COMMENT '异常状态,0=异常,1=正常',
      `order_resource` varchar(20) NOT NULL COMMENT '订单来源,暂时只有微信公众号',
      `receive_address` varchar(128) NOT NULL COMMENT '收货地址',
      `receive_man` varchar(100) NOT NULL COMMENT '收货人名称',
      `receive_tel` varchar(20) NOT NULL COMMENT '收货人联系电话',
      `address_longitude` varchar(36) DEFAULT NULL COMMENT '地址经度',
      `address_latitude` varchar(36) DEFAULT NULL,
      `delivery_date_start` timestamp NULL DEFAULT NULL COMMENT '配送开始时间',
      `delivery_date_end` timestamp NULL DEFAULT NULL COMMENT '配送时间结束时间',
      `receive_date_start` timestamp NULL DEFAULT NULL COMMENT '收货时间-开始时间',
      `receive_date_end` timestamp NULL DEFAULT NULL COMMENT '收货时间-截止时间',
      `receive_date_sure` timestamp NULL DEFAULT NULL COMMENT '确认收货时间',
      `if_end` bit(1) NOT NULL COMMENT '订单是否结束(0=未结束,1=结束)',
      `remark` varchar(512) DEFAULT NULL COMMENT '订单备注',
      `bill_id` varchar(36) DEFAULT NULL COMMENT '票据id,为空时表示该订单不开票',
      `sort` tinyint(4) NOT NULL DEFAULT '1' COMMENT '排序码',
      `state` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态(0=删除,1=正常)',
      `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(下单时间)',
      `create_user` varchar(36) NOT NULL COMMENT '创建人',
      `create_user_name` varchar(128) DEFAULT NULL,
      `last_modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
      `last_modify_user` varchar(36) NOT NULL COMMENT '最后修改人',
      `last_modify_user_name` varchar(128) DEFAULT NULL,
      `order_time_type` varchar(1) NOT NULL DEFAULT '1' COMMENT '订单类型,0预约单/1正常单/2加急单',
      `reduction_money` decimal(10,2) DEFAULT '0.00' COMMENT '满减金额',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='订单表';
    

    备注:需要统计的是每个月的销售金额,而销售金额=出库金额-运费,即
    sale_money= out_stock_money-freight_money;
    create_time字段为下单时间,这里可以理解为销售时间

    计算环比
    思路:表a统计出当前年月份的销售总额,表b统计出上一个月的销售总额(在表a的基础上加上一个月,可得到上个月的销售量),然后再将两个表进行左联接(通过now_time进行关联)。
    在这里插入图片描述
    #当前月份的销售额

    select 
    date_format(a.create_time,'%Y-%m') as now_time,
    sum( a.out_stock_money) AS  a_out_money,
    sum( a.freight_money) AS a_fre_money,
    CONVERT (sum( a.out_stock_money)-sum( a.freight_money),DECIMAL ( 10,2 )) as a_sale_money
    from food_orders_info a
    where a.state=1
    and a.order_state=60
    GROUP BY date_format(a.create_time,'%Y-%m')
    

    #上个月的销售额

    select 
    date_format(DATE_ADD(b.create_time,INTERVAL 1 MONTH ), '%Y-%m') 	as now_time,
    sum( b.out_stock_money) AS bout_money,
    sum( b.freight_money) AS bfe_money,
    CONVERT (sum(b.out_stock_money)-sum( b.freight_money),DECIMAL ( 10,2 )) as bsale_money
    from food_orders_info b
    where b.state=1
    and b.order_state=60
    GROUP BY date_format(DATE_ADD(b.create_time,INTERVAL 1 MONTH ), '%Y-%m')
    

    备注:

    DATE_ADD(b.create_time,INTERVAL 1 MONTH )  #表示加一个月
    

    #当前月和上月销售额进行关联

    SELECT
    	now_sale.now_time,
    	now_sale.now_year,
    CASE
    		
    		WHEN a_sale_money IS NULL 
    		OR a_sale_money = 0 THEN
    			0 ELSE a_sale_money 
    		END this_sale_money,
    CASE
    		
    		WHEN b_sale_money IS NULL 
    		OR b_sale_money = 0 THEN
    			0 ELSE b_sale_money 
    		END last_month_money,
    
    CASE
    		
    		WHEN b_sale_money IS NULL 
    		OR b_sale_money = 0 THEN
    			0 ELSE ( CONVERT ( ( ( a_sale_money - b_sale_money ) / b_sale_money ) * 100, DECIMAL ( 10, 2 ) ) ) 
    		END month_ratio
    FROM
    	(
    	SELECT
    		date_format( a.create_time, '%Y-%m' ) AS now_time,
    		date_format( a.create_time, '%Y' ) AS now_year,
    		sum( a.out_stock_money ) AS a_out_money,
    		sum( a.freight_money ) AS a_fre_money,
    		CONVERT ( sum( a.out_stock_money ) - sum( a.freight_money ), DECIMAL ( 10, 2 ) ) AS a_sale_money 
    	FROM
    		food_orders_info a 
    	WHERE
    		a.state = 1 
    		AND a.order_state = 60 
    	
    	GROUP BY
    		date_format( a.create_time, '%Y-%m' ),
    		date_format( a.create_time, '%Y' ) 
    	ORDER BY
    		date_format( a.create_time, '%Y-%m' ) ASC 
    	) now_sale
    	LEFT JOIN (
    	SELECT
    		date_format( DATE_ADD( b.create_time, INTERVAL 1 MONTH ), '%Y-%m' ) AS now_time,
    		sum( b.out_stock_money ) AS bout_money,
    		sum( b.freight_money ) AS bfe_money,
    		CONVERT ( sum( b.out_stock_money ) - sum( b.freight_money ), DECIMAL ( 10, 2 ) ) AS b_sale_money 
    	FROM
    		food_orders_info b 
    	WHERE
    		b.state = 1 
    		AND b.order_state = 60 
    	GROUP BY
    		date_format( DATE_ADD( b.create_time, INTERVAL 1 MONTH ), '%Y-%m' ) 
    	ORDER BY
    		date_format( DATE_ADD( b.create_time, INTERVAL 1 MONTH ), '%Y-%m' ) ASC 
    	) old_sale ON now_sale.now_time = old_sale.now_time
    ORDER BY
    	now_sale.now_year DESC,
    	now_sale.now_time ASC
    

    得到的关联表
    在这里插入图片描述

    由于数据库销售金额有为空的情况,所以的加上判断条件,让为空或被除数为空的值,返回0。
    再查询去年同期的销售金额

    SELECT
    		date_format( DATE_ADD( c.create_time, INTERVAL 1 YEAR ), '%Y-%m' ) AS last_year_time,
    		sum( c.out_stock_money ) AS bout_money,
    		sum( c.freight_money ) AS bfe_money,
    		CONVERT ( sum( c.out_stock_money ) - sum( c.freight_money ), DECIMAL ( 10, 2 ) ) AS last_year_money 
    	FROM
    		food_orders_info c 
    	WHERE
    		c.state = 1 
    		AND c.order_state = 60 
    	GROUP BY
    	date_format( DATE_ADD( c.create_time, INTERVAL 1 YEAR ), '%Y-%m' ) 
    
    

    DATE_ADD( c.create_time, INTERVAL 1 YEAR ) 表示加一年。
    得到的表如下:
    在这里插入图片描述
    最后,整合当前年月销售、上个月销售、去年同期销售。

    SELECT
    	now_sale.now_time,
    	now_sale.now_year,
    CASE
    		
    		WHEN a_sale_money IS NULL 
    		OR a_sale_money = 0 THEN
    			0 ELSE a_sale_money 
    		END this_sale_money,
    CASE
    		
    		WHEN b_sale_money IS NULL 
    		OR b_sale_money = 0 THEN
    			0 ELSE b_sale_money 
    		END last_month_money,
    CASE
    		
    		WHEN last_year_money IS NULL 
    		OR last_year_money = 0 THEN
    			0 ELSE last_year_money 
    		END last_year_money,
    CASE
    		
    		WHEN b_sale_money IS NULL 
    		OR b_sale_money = 0 THEN
    			0 ELSE ( CONVERT ( ( ( a_sale_money - b_sale_money ) / b_sale_money ) * 100, DECIMAL ( 10, 2 ) ) ) 
    		END month_ratio,
    CASE
    		
    		WHEN last_year_money IS NULL 
    		OR last_year_money = 0 THEN
    			0 ELSE ( CONVERT ( ( ( a_sale_money - last_year_money ) / last_year_money ) * 100, DECIMAL ( 10, 2 ) ) ) 
    		END year_ratio 
    FROM
    	(
    	SELECT
    		date_format( a.create_time, '%Y-%m' ) AS now_time,
    		date_format( a.create_time, '%Y' ) AS now_year,
    		sum( a.out_stock_money ) AS a_out_money,
    		sum( a.freight_money ) AS a_fre_money,
    		CONVERT ( sum( a.out_stock_money ) - sum( a.freight_money ), DECIMAL ( 10, 2 ) ) AS a_sale_money 
    	FROM
    		food_orders_info a 
    	WHERE
    		a.state = 1 
    		AND a.order_state = 60 
    	
    	GROUP BY
    		date_format( a.create_time, '%Y-%m' ),
    		date_format( a.create_time, '%Y' ) 
    	ORDER BY
    		date_format( a.create_time, '%Y-%m' ) ASC 
    	) now_sale
    	LEFT JOIN (
    	SELECT
    		date_format( DATE_ADD( b.create_time, INTERVAL 1 MONTH ), '%Y-%m' ) AS now_time,
    		sum( b.out_stock_money ) AS bout_money,
    		sum( b.freight_money ) AS bfe_money,
    		CONVERT ( sum( b.out_stock_money ) - sum( b.freight_money ), DECIMAL ( 10, 2 ) ) AS b_sale_money 
    	FROM
    		food_orders_info b 
    	WHERE
    		b.state = 1 
    		AND b.order_state = 60 
    	GROUP BY
    		date_format( DATE_ADD( b.create_time, INTERVAL 1 MONTH ), '%Y-%m' ) 
    	ORDER BY
    		date_format( DATE_ADD( b.create_time, INTERVAL 1 MONTH ), '%Y-%m' ) ASC 
    	) old_sale ON now_sale.now_time = old_sale.now_time
    	LEFT JOIN (
    	SELECT
    		date_format( DATE_ADD( c.create_time, INTERVAL 1 YEAR ), '%Y-%m' ) AS last_year_time,
    		sum( c.out_stock_money ) AS bout_money,
    		sum( c.freight_money ) AS bfe_money,
    		CONVERT ( sum( c.out_stock_money ) - sum( c.freight_money ), DECIMAL ( 10, 2 ) ) AS last_year_money 
    	FROM
    		food_orders_info c 
    	WHERE
    		c.state = 1 
    		AND c.order_state = 60 
    	GROUP BY
    		date_format( DATE_ADD( c.create_time, INTERVAL 1 YEAR ), '%Y-%m' ) 
    	ORDER BY
    		date_format( DATE_ADD( c.create_time, INTERVAL 1 YEAR ), '%Y-%m' ) ASC 
    	) last_year_sale ON now_sale.now_time = last_year_sale.last_year_time 
    	
    ORDER BY
    	now_sale.now_year DESC,
    	now_sale.now_time ASC
    

    查询得到
    在这里插入图片描述
    month_radio即环比,year_ratio即同比。

    按季度统计销售总额、环比

    查询季度主要使用 QUARTER ( 时间)函数
    方法和按年月统计类似,就直接上sql语句了

    #查询当前季度销售总额
    SELECT
    		date_format( a.create_time, '%Y' ) AS now_year,
    		QUARTER ( a.create_time ) a_quarter,
    		CONCAT( YEAR ( a.create_time ), QUARTER ( a.create_time ) ) now_quarter,
    		sum( a.out_stock_money ) AS a_out_money,
    		sum( a.freight_money ) AS a_fre_money,
    		CONVERT ( sum( a.out_stock_money ) - sum( a.freight_money ), DECIMAL ( 10, 2 ) ) AS a_sale_money 
    	FROM
    		food_orders_info a 
    	WHERE
    		a.state = 1 
    		AND a.order_state = 60 
    	GROUP BY
    		CONCAT( YEAR ( a.create_time ), QUARTER ( a.create_time )),date_format( a.create_time, '%Y' ),	QUARTER ( a.create_time )
    

    QUARTER ( a.create_time ) 指查询当前时间在哪一个季度
    在这里插入图片描述

    查询上一季度销售总额

    SELECT
    		CONCAT( YEAR ( b.create_time ), QUARTER ( DATE_ADD( b.create_time, INTERVAL 1 QUARTER ) ) ) AS last_quarter,
    		sum( b.out_stock_money ) AS b_out_money,
    		sum( b.freight_money ) AS b_fre_money,
    		CONVERT ( sum( b.out_stock_money ) - sum( b.freight_money ), DECIMAL ( 10, 2 ) ) AS b_sale_money 
    	FROM
    		food_orders_info b 
    	WHERE
    		b.state = 1 
    		AND b.order_state = 60 
    	GROUP BY
    	CONCAT( YEAR ( b.create_time ), QUARTER ( DATE_ADD( b.create_time, INTERVAL 1 QUARTER ) ) ) 	
    

    在这里插入图片描述

    查询去年同季度销售额

    SELECT
    		CONCAT(YEAR( DATE_ADD( c.create_time, INTERVAL 1 year )),QUARTER(c.create_time)) as last_year_quarter,
    		sum( c.out_stock_money ) AS c_out_money,
    		sum( c.freight_money ) AS c_fre_money,
    		CONVERT ( sum( c.out_stock_money ) - sum( c.freight_money ), DECIMAL ( 10, 2 ) ) AS c_sale_money 
    	FROM
    		food_orders_info c 
    	WHERE
    		c.state = 1 
    		AND c.order_state = 60 
    	GROUP BY
    	CONCAT(YEAR( DATE_ADD( c.create_time, INTERVAL 1 year )),QUARTER(c.create_time)) 
    

    在这里插入图片描述
    查询本季度、上一季度的销售额,并统计环比

    SELECT
    	now_quarter_sale.now_year,
    	now_quarter_sale.a_quarter,
    	now_quarter_sale.now_quarter,
    CASE
    		
    		WHEN now_quarter_sale.a_sale_money IS NULL 
    		OR now_quarter_sale.a_sale_money = 0 THEN
    			0 ELSE now_quarter_sale.a_sale_money 
    		END this_sale_money,
    CASE
    		
    		WHEN last_quarter_sale.b_sale_money IS NULL 
    		OR last_quarter_sale.b_sale_money = 0 THEN
    			0 ELSE last_quarter_sale.b_sale_money 
    		END last_sale_money,
    		
    CASE
    		WHEN last_quarter_sale.b_sale_money IS NULL 
    		OR last_quarter_sale.b_sale_money = 0 THEN
    			0 ELSE CONVERT ( ( ( now_quarter_sale.a_sale_money - last_quarter_sale.b_sale_money ) / last_quarter_sale.b_sale_money ) * 100, DECIMAL ( 10, 2 ) )
    		END last_quarter_ratio 
    FROM
    	(
    	SELECT
    		date_format( a.create_time, '%Y' ) AS now_year,
    		QUARTER ( a.create_time ) a_quarter,
    		CONCAT( YEAR ( a.create_time ), QUARTER ( a.create_time ) ) now_quarter,
    		sum( a.out_stock_money ) AS a_out_money,
    		sum( a.freight_money ) AS a_fre_money,
    		CONVERT ( sum( a.out_stock_money ) - sum( a.freight_money ), DECIMAL ( 10, 2 ) ) AS a_sale_money 
    	FROM
    		food_orders_info a 
    	WHERE
    		a.state = 1 
    		AND a.order_state = 60 
    	GROUP BY
    		CONCAT( YEAR ( a.create_time ), QUARTER ( a.create_time )),date_format( a.create_time, '%Y' ),	QUARTER ( a.create_time )
    	) now_quarter_sale
    	LEFT JOIN (
    	SELECT
    		CONCAT( YEAR ( b.create_time ), QUARTER ( DATE_ADD( b.create_time, INTERVAL 1 QUARTER ) ) ) AS last_quarter,
    		sum( b.out_stock_money ) AS b_out_money,
    		sum( b.freight_money ) AS b_fre_money,
    		CONVERT ( sum( b.out_stock_money ) - sum( b.freight_money ), DECIMAL ( 10, 2 ) ) AS b_sale_money 
    	FROM
    		food_orders_info b 
    	WHERE
    		b.state = 1 
    		AND b.order_state = 60 
    	GROUP BY
    	CONCAT( YEAR ( b.create_time ), QUARTER ( DATE_ADD( b.create_time, INTERVAL 1 QUARTER ) ) ) 
    	) last_quarter_sale ON now_quarter_sale.now_quarter = last_quarter_sale.last_quarter
    
    

    在这里插入图片描述
    最终 ,统计当前季度、上一季度、以及去年同一季度的环比、同比

    SELECT
    	now_quarter_sale.now_year,
    	now_quarter_sale.a_quarter,
    	now_quarter_sale.now_quarter,
    CASE
    		
    		WHEN now_quarter_sale.a_sale_money IS NULL 
    		OR now_quarter_sale.a_sale_money = 0 THEN
    			0 ELSE now_quarter_sale.a_sale_money 
    		END this_sale_money,
    CASE
    		
    		WHEN last_quarter_sale.b_sale_money IS NULL 
    		OR last_quarter_sale.b_sale_money = 0 THEN
    			0 ELSE last_quarter_sale.b_sale_money 
    		END last_sale_money,
    		
    CASE
    		WHEN last_quarter_sale.b_sale_money IS NULL 
    		OR last_quarter_sale.b_sale_money = 0 THEN
    			0 ELSE CONVERT ( ( ( now_quarter_sale.a_sale_money - last_quarter_sale.b_sale_money ) / last_quarter_sale.b_sale_money ) * 100, DECIMAL ( 10, 2 ) )
    		END last_quarter_ratio ,
    CASE
    		WHEN last_year_quarter_sale.c_sale_money	 IS NULL 
    		OR last_year_quarter_sale.c_sale_money	 = 0 THEN
    			0 ELSE last_year_quarter_sale.c_sale_money	
    		END last_year_money,
    CASE
    		WHEN last_year_quarter_sale.c_sale_money	 IS NULL 
    		OR last_year_quarter_sale.c_sale_money	 = 0 THEN
    			0 ELSE CONVERT ( ( ( now_quarter_sale.a_sale_money - last_year_quarter_sale.c_sale_money ) / last_year_quarter_sale.c_sale_money ) * 100, DECIMAL ( 10, 2 ) )
    		END last_year_ratio
    FROM
    	(
    	SELECT
    		date_format( a.create_time, '%Y' ) AS now_year,
    		QUARTER ( a.create_time ) a_quarter,
    		CONCAT( YEAR ( a.create_time ), QUARTER ( a.create_time ) ) now_quarter,
    		sum( a.out_stock_money ) AS a_out_money,
    		sum( a.freight_money ) AS a_fre_money,
    		CONVERT ( sum( a.out_stock_money ) - sum( a.freight_money ), DECIMAL ( 10, 2 ) ) AS a_sale_money 
    	FROM
    		food_orders_info a 
    	WHERE
    		a.state = 1 
    		AND a.order_state = 60 
    	GROUP BY
    		CONCAT( YEAR ( a.create_time ), QUARTER ( a.create_time )),date_format( a.create_time, '%Y' ),	QUARTER ( a.create_time )
    	) now_quarter_sale
    	LEFT JOIN (
    	SELECT
    		CONCAT( YEAR ( b.create_time ), QUARTER ( DATE_ADD( b.create_time, INTERVAL 1 QUARTER ) ) ) AS last_quarter,
    		sum( b.out_stock_money ) AS b_out_money,
    		sum( b.freight_money ) AS b_fre_money,
    		CONVERT ( sum( b.out_stock_money ) - sum( b.freight_money ), DECIMAL ( 10, 2 ) ) AS b_sale_money 
    	FROM
    		food_orders_info b 
    	WHERE
    		b.state = 1 
    		AND b.order_state = 60 
    	GROUP BY
    	CONCAT( YEAR ( b.create_time ), QUARTER ( DATE_ADD( b.create_time, INTERVAL 1 QUARTER ) ) ) 
    	) last_quarter_sale ON now_quarter_sale.now_quarter = last_quarter_sale.last_quarter
    	LEFT JOIN 
    	(
    SELECT
    		CONCAT(YEAR( DATE_ADD( c.create_time, INTERVAL 1 year )),QUARTER(c.create_time)) as last_year_quarter,
    		sum( c.out_stock_money ) AS c_out_money,
    		sum( c.freight_money ) AS c_fre_money,
    		CONVERT ( sum( c.out_stock_money ) - sum( c.freight_money ), DECIMAL ( 10, 2 ) ) AS c_sale_money 
    	FROM
    		food_orders_info c 
    	WHERE
    		c.state = 1 
    		AND c.order_state = 60 
    	GROUP BY
    	CONCAT(YEAR( DATE_ADD( c.create_time, INTERVAL 1 year )),QUARTER(c.create_time)) 
    	)last_year_quarter_sale  on now_quarter_sale.now_quarter=last_year_quarter_sale.last_year_quarter
    

    在这里插入图片描述
    last_quarter_ratio = ((this_sale_money-last_sale_money)/last_sale_money)*100%
    last_year_ratio = ((this_sale_money-last_year_money)/last_year_money)*100%

    界面实现效果:
    在这里插入图片描述
    有兴趣的老爷,可以关注我的公众号【一起收破烂】,回复【006】获取2021最新java面试资料以及简历模型120套哦~
    在这里插入图片描述

    展开全文
  • 同比环比

    2010-03-10 17:49:48
    同比即本年某月与上年同期相比,如:2009年2月份与2008年2月份的工业产值的...同比就是去年同一时间相比,环比就是上一个统计期相比!!比如刚刚公布的海关四月份进出口数据,同比就是2008年4月份相比,环比...
  • MySQL-查询指定时间段数据,近7天、指定季度、年度数据 业务需求需要查询指定时间段数据,特此记录,有更优时则优化更新。 字母缩写 TB 操作表(TableName) q_time 操作的时间字段(query_time) 代码都是经过...
  • mysql计算同比环比

    2020-05-21 20:50:11
    sql 计算同比环比同比 SELECT t1.now_year AS 年份, t1.now_month AS 月份, CASE WHEN now_month_num IS NULL OR now_month_num = 0 THEN 0 ELSE now_month_num END 本月销售量, CASE WHEN last_month_num IS ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,242
精华内容 496
关键字:

年度同比和年度环比