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

    千次阅读 2020-08-27 09:26:32
    笔者借鉴学习了6种tableau同比或环比计算方法 方法1:官方提供的快速表计算:年度同比增长 方法2:筛选年份同比上一年 方法3:通过设定日期月度范围来比较销售额 方法4:

    笔者借鉴学习了6种tableau同比或环比计算方法

    方法1:官方提供的快速表计算:年度同比增长

    方法2:筛选年份同比上一年
    在这里插入图片描述
    方法3:通过设定日期月度范围来比较销售额
    在这里插入图片描述

    方法4:与去年、2年前、3年前对比
    在这里插入图片描述

    方法5:

    展开全文
  • MySQL统计同比环比SQL

    万次阅读 2018-03-05 14:23:49
    大体思路:MySQL没有类似oracle方便的统计函数,只能靠自己去硬计算:通过时间字段直接增加年份、月份,然后通过left join关联时间字段去计算环比、同比公式即可原始表结构:求同比SQL:-- 按年同比 SELECT t5.*, ...
     

    大体思路:

     

    MySQL没有类似oracle方便的统计函数,只能靠自己去硬计算:通过时间字段直接增加年份、月份,然后通过left join关联时间字段去计算环比、同比公式即可

     

    原始表结构:

    求同比SQL:

    -- 按年同比
    
    SELECT t5.*, CASE WHEN t5.last_energy_year IS NULL OR t5.last_energy_year =0 THEN 0.00
                    ELSE FORMAT(((t5.energy_year - t5.last_energy_year)/t5.last_energy_year)*100,2) 
            END YoY  -- 同比
    FROM ( 
       SELECT t3.*,t4.last_energy_year
        FROM 
        (
           SELECT DATE_FORMAT(CONCAT(t1.`tyear`, '-', t1.`tmonth`,'-01'),'%Y-%m-%d') AS YearMonth,t1.tyear,SUM(t1.energy_month) energy_year,t1.linename
            FROM(SELECT 
            t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot 
            FROM `ksh_tgyjy_llxgyjydlxx` t 
            GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1
            GROUP BY t1.tyear,t1.`linename`
         ) t3 
          LEFT JOIN 
        (
          SELECT DATE_ADD(DATE_FORMAT(CONCAT(t1.`tyear`, '-', t1.`tmonth`,'-01'),'%Y-%m-%d'),INTERVAL 1 YEAR) AS lastYearMonth,t1.tyear,SUM(t1.energy_month) last_energy_year,t1.linename
            FROM(SELECT t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot 
            FROM `ksh_tgyjy_llxgyjydlxx` t 
            GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1
            GROUP BY t1.tyear,t1.`linename`
        ) t4
        ON t3.YearMonth = t4.lastYearMonth
        AND t3.linename = t4.linename 
    ) t5
    

    查询结果:

    求月环比SQL:

    -- 按月同比
    
    SELECT DATE_FORMAT(t5.YearMonth,'%Y-%m') YearMonth,t5.`linename`,t5.`energy_month`, 
             CASE WHEN t5.lat_energy_month IS NULL OR t5.lat_energy_month=0 THEN 0.00
                     ELSE FORMAT(((t5.energy_month - t5.lat_energy_month)/t5.lat_energy_month)*100,2) 
            END YoY
    FROM ( 
       SELECT t3.*,t4.energy_month lat_energy_month
         FROM 
        (
          SELECT DATE_FORMAT(CONCAT(t1.`tyear`, '-', t1.`tmonth`,'-01'),'%Y-%m-%d') AS YearMonth,t1.*
            FROM(SELECT 
              t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot 
              FROM `ksh_tgyjy_llxgyjydlxx` t 
              GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1
         ) t3 
           LEFT JOIN 
        (
          SELECT DATE_ADD(DATE_FORMAT(CONCAT(t1.`tyear`, '-', t1.`tmonth`,'-01'),'%Y-%m-%d'),INTERVAL 1 YEAR) AS lastYearMonth,t1.* 
            FROM(SELECT t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot 
            FROM `ksh_tgyjy_llxgyjydlxx` t 
            GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1
        ) t4
        ON t3.YearMonth = t4.lastYearMonth
        AND t3.linename = t4.linename
    ) t5
    

    查询结果:

    展开全文
  • MySQL计算环比、同比(年、月、季度)

    万次阅读 多人点赞 2019-08-06 12:50:46
    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套哦~
    在这里插入图片描述

    展开全文
  • 同比与环比的区别

    千次阅读 2019-03-31 23:42:40
    区别: 1、同比和环比,这两者所反映的虽然都是变化速度,但由于采用基期的不同...2、同比:与历史同时期比较,就是与不同年份的同一时期作比较,例如2005年7月份与2004年7月份相比,叫同比。如图2012年5月与2013年...

    区别:

    1、同比和环比,这两者所反映的虽然都是变化速度,但由于采用基期的不同,其反映的内涵是完全不同的;

    一般来说,环比可以与环比相比较,而不能拿同比与环比相比较;而对于同一个地方,考虑时间纵向上发展趋势的反映,则往往要把同比与环比放在一起进行对照。

    2、同比:与历史同时期比较,就是与不同年份的同一时期作比较,例如2005年7月份与2004年7月份相比,叫同比。如图2012年5月与2013年5月对比就叫做同比。

     

    同比,比如,2012年3月比2011年3月叫同比。
    环比,比如,2012年3月比2012年2月叫环比。

    展开全文
  • 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 ...
  • sql语句下的同比,环比操作

    千次阅读 多人点赞 2020-07-01 00:44:26
    sql语句下的同比,环比操作 题目:有两个表 表一:销售明细 表二:产品明细 需求:查询2020年,每月的销售额,以及同比环比,并按照年月进行升序排序 建数据库 建表 插入数据 偷个懒,这些语句就先省略了 给看个截图...
  • 同比:与历史同时期比较,就是与不同年份的同一时期作比较,例如2005年3月份与2004年3月份相比,叫同比。 环比:与上一统计段比较就是与前一个相邻的时期作比较,例如2005年4月份与2005年5月份相比较,叫环比。 在...
  • 在折线图中增加对应月份的同比情况 增加同比计算字段即可 SUM([销售额])/LOOKUP(ZN(SUM([销售额])),-12)-1 理解ZN -12为获取同比数,lookup查找
  • 就可以获取一只股票的总资产同比增长率 与 净资产同比增长率了。   import baostock as bs import pandas as pd   # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_...
  • 窗口函数:计算环比和同比

    千次阅读 2019-03-27 12:45:47
    0 前言 环比,表示连续2个单位周期(比如连续两月)内的量的... 同比一般情况下是今年第n月与去年第n月比,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度,计算公式:同比增长速度=(本期发展...
  • /// 生成计算同比环比查询语句 /// table:表名称;statColumns:要统计的值字段;yearColumn:年份字段名;monthColumn:月份字段名;joinColumns:除年月外的连接条件 /// --上期无值或0本期有值不为0:1 ...
  • 同比 = 2018年10月/2017年10月(不同时期内相同时间段的比较) 环比增长率 =(2018年10月-2018年09月)/2018年09月 同比增长率 =(2018年10月-2017年10月)/2017年10月 2.关键sql 解释 (1)分析函数 lead(params...
  • dax-自定义周做同比和环比

    千次阅读 2018-07-26 11:21:24
    中国式报表:公司要指定财务月做月度周期,然后还要切分周,要做同比和环比。查了一些老师的文章和资料,发觉都没有现在要求的这么复杂。于是只好用很笨的办法去写了公式,至少看起来是需求的样子了,后续有没有bug...
  • 在每个维度的总和,或者每个分类的环比、同比。 2.背景: 一家国外品牌的自行车生产公司,在中国拥有三个代理商帮助销售其品牌产品,该品牌的自行在中国车十分畅销,在各个地区都有其用户。 该场景下的维度有: ...
  • Mysql计算同比环比(超详细)

    千次阅读 热门讨论 2020-09-11 20:52:17
    产品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.销售...
  • 很早之前已经讲过 《Cognos利用DMR模型开发同比环比》这篇文章里说的是不利用过滤器,而是采用 except (lastPeriods (-9000,[订单数据分析].[日期维度].[日期维度].[日]->?bdate?),lastPeriods (-9000,nextMember ...
  • SQL实现占比、同比、环比指标分析

    千次阅读 2019-09-27 14:29:15
    三、同比 首先理解同比的概念,同比就是与历史同时期比较,就是与不同年份的同一时期作比较,例如2019年7月份与2018年7月份相比,叫同比。如图2012年5月与2013年5月对比就叫做同比。 月订单量同比 -- 求每个月订单...
  • 哈喽,亲爱的小伙伴们,我们好久不见哦!今天我们来分享一下如何制作可以看到当年销售额和上年销售额对比情况,同时还能看到当年目标额完成情况的图表。如下动态图所示,灰色部分为去年各月销售额,蓝色部分为19年各...
  • 本文讲述如何利用 Oracle BIEE 的时间维(Time Dimension)及时间轴函数(Time Series Conversion Function)实现累计、同比、环比计算。本文使用的示例数据可以通过此链接下载:http://www.zw1840.com/。 如果你
  • 使用分析函数:偏移量函数 偏移量函数:Lag(exp,N,defval) over(PARTITION BY region order by year) Lag函数为Lag(exp,N,defval),exp...region 表示参照序列,只对一个region的值取上一个值。 你写的时候需要按per
  • 返回数据说明 参数名称 参数描述 code 证券代码 pubDate 公司发布财报的日期 statDate 财报统计的季度的最后一天, 比如2017-03-31, 2017-06-30 YOYEquity 净资产同比增长率 YOYAsset 总资产同比增长率 YOYNI 净利润...
  • #!usr/bin/env python #-*- coding:utf-8 _*- ''' @author:Administrator @file: pandas_dataframe_cases3.py ...1.不同年份书的数量 2.不同年份书的平均评分情况 ''' import pandas as pd from matplotlib imp...
  • select code,zw,zj,year from ZW a where not exists(select 1 from ZW where code=a.code and year>a.year)对ZW表进行扫描,编号(或姓名)相同情况下,没有前边年份大的数据存在,也就是取相同编号(或姓名)...
  • 今日看点✦华为开发者大会9月10日举行:将揭开鸿蒙OS和EMUI11神秘面纱✦ 吉利汽车已完成科创板上市辅导,冲击“科创板整车第一股”✦ 贵州茅台整治“年份酒”乱象:非酒业协会认证一律...
  • 选择永远努力更重要!

    万次阅读 多人点赞 2017-12-25 06:12:16
    选择永远努力更重要。如果一个行业正处在起飞阶段,朝气蓬勃,那么这样的一类行业能够给你提供的机遇和可能都是无限的。就像有人说:当龙卷风来的时候,猪都能上天。相反,如果你所处的行业正逐渐没落,那么即使你...
  • 花顺函数API

    万次阅读 2015-12-17 10:01:37
    (主要用来计算量) MINE 是否有雷 PERVOL 分价量 SELLCOUNT1 卖一量 含义:委托卖出价格一对应的委托数量。 用于:个股的实时周期。 SELLCOUNT2 卖二量 含义:委托卖出价格二对应的...
  • 数据可视化黑科技!它python强大20倍

    千次阅读 多人点赞 2020-07-22 10:17:34
    如果使用Excel透视表,可以将年份、月份字段拖拽到行区域,将合同金额字段拖拽到数据区域以完成每个年月的合同金额统计,但是对于求组内排名、组内累计值、累计达成率、同比环比等计算,Excel透视表处理起来则比较...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,331
精华内容 8,532
关键字:

年份的同比