精华内容
下载资源
问答
  • 环比增长率怎么月度(本周比上周是同比还是环比)
    千次阅读
    2020-12-21 21:52:00

    —分享—

    近日,易观发布了2019年2月份移动APP TOP1000榜单。在移动互联网婚恋交友领域,珍爱网APP位列榜首,其中2月份月活跃人数更是突破500万人,环比增长率超过20%,远超同类竞品,在行业中处于遥遥领先的地位。

    随着移动互联网的高速发展,网络已经逐渐从生活服务渗透到大众的人生服务中去,移动婚恋也越来越成为大众的一种生活方式。受此影响,国内在线婚恋交友企业纷纷发力移动端。易观在《2019年中国网络婚恋交友行业研究报告》中指出,目前移动端呈现结构性持续增长,其主导地位已然稳固,重要性将进一步提升。

    在易观发布的2019年2月份移动APP TOP1000榜单中,珍爱网月活跃人数达到542.2万人,比榜单中同类竞品第二名还多出200万人,而环比增长率也达到20.68%,同样位居行业前列。珍爱网在移动端的优异表现,不仅进一步巩固了其在行业中的领先地位,同时也印证了珍爱网在移动社交领域正以越来越优质的服务体验,赢得越来越多用户的认可和喜爱。

    作为在线婚恋行业的领跑者,13年来珍爱网持续深耕国内婚恋交友市场,致力于打造全新婚恋社交模式,通过引入更多的创新玩法和全新婚配模式,构建婚恋服务闭环,为旗下1.7亿优质会员带来更高效、更有趣的婚恋相亲服务体验。随着90后、95后成为新一代年轻适婚人群,他们在婚恋理念、社交方式、互联网产品使用习惯等方面有着很大不同,基于对用户需求的深刻洞察,珍爱网在玩法和婚配模式上不断创新。

    珍爱网在婚恋领域首创了婚恋+直播服务。2017年7月,珍爱网就上线了直播产品,并进行1V1双屏直播软件保护。1v1双屏互动直播的亮点在于,当用户看到喜欢的直播用户,便可以申请直接与其连麦,对方通过后,便可以直接与她聊天沟通,而其他用户则可以在直播间浏览双方的直播情况,这样就更像是生活中聊天的场景,有其他人在场,也能避免双方的尴尬。这一玩法创新也让年轻适婚用户在通过婚恋交友平台寻找对象时,不仅是看到对方年龄、收入等基本信息是否匹配,更能了解对方的婚姻态度、思维方式、个性内涵、相处模式等更多真实、多维度的信息。

    从2017年7月起,珍爱网App共进行过49次产品迭代更新。目前,珍爱网的双屏直播已经升级为多屏直播,可以支持多名用户同时上麦。另外,针对直播区域,用户还可以选择同城专区、优质专区、待连麦专区、高学历专区和告白专区,进行精准浏览。珍爱网的“恋歌房”频道,用户也可以像天天K歌、酷我K歌一样在“珍爱练歌房”里K歌。

    除了上线直播功能,2018年7月,珍爱网在6.0版本中上线了“动态”功能,该功能类似于微信朋友圈,用户可以直接在App里分享文字、照片、视频、心情、签到等内容。“动态”功能的推出,让用户有更大的展示空间,无论是用户的心情、想法还是生活的片段等,都可以在动态里展示,这样用户就更接近真实的自己。对于其他用户而言,通过“动态”也能够更多地了解到对方的信息,毕竟,职业、教育水平、兴趣爱好等都是固定的,动态功能的引入让原本单一、略显枯燥的了解其他用户的模式,更加立体有趣。不难看出,借势社交的产品逻辑,大大提升了用户在产品上的停留时长和打开频率,而用户之间的互动也随之提升。

    此外,珍爱网还提供“心灵视界”功能,通过24道专业的心理测试题来了解用户的婚恋观,价值观和性格,通过科学,人性化的方法帮助用户快速找到合适的对象,从而提升婚恋交友的效率,让用户体验大大提升。

    未来,移动端对于在线婚恋网站的发展将扮演越来越重要的角色,用户对品牌的认可和依赖在移动端将越发明显。而VR、AR、5G等前沿科技在婚恋产业中的应用也将带给服务创新者更多的机会。珍爱网移动端月活突破500万只是其发展的一小步,珍爱网将通过持续的创新、深度地打磨产品、不断升级服务,用更完善的相亲生态,满足广大单身青年男女的婚恋需求,为单身青年男女带来更加真实、有趣的相亲交友体验,引领行业的创新发展。

    更多相关内容
  • SQL计算月环比、月同比

    千次阅读 2020-08-17 17:51:37
    在工作的过程中,经常会使用到环比、同比,那关于如何用SQL去写环比和同比呢?非常简单,用interval函数,轻松实现。 interval 1 month,环比 interval 1 year ,同比 一、准备数据 为了快速理解,我建了一个表,关于...

    在工作的过程中,经常会使用到环比、同比,那关于如何用SQL去写环比和同比呢?非常简单,表自联以及interval函数,轻松实现。
    interval 1 month,环比
    interval 1 year ,同比

    一、准备数据

    为了快速理解,我建了一个表,关于订单金额的(数据是随机数,非真实数据)
    数据格式如下:
    数据尽量极简,所以就只有日期和订单金额。
    (格式是之前一个面试官给我举的例子)

    二、计算

    1、月环比
    代码:

    ##月环比
    select substr(a.d,1,7) as month ,a.d,a.orderpay,b.dd,b.originalday,b.orderpay,
    (a.orderpay-b.orderpay)/b.orderpay as month_rate 
    from 
    (select DATE_FORMAT(CONCAT(datetime,'-01'),'%Y-%m-%d') as d ,orderpay  from ordertable) a  
    left join 
    (select DATE_ADD(DATE_FORMAT(CONCAT(datetime,'-01'),'%Y-%m-%d'),INTERVAL 1 month )as dd 
    ,DATE_FORMAT(CONCAT(datetime,'-01'),'%Y-%m-%d')as originalday,orderpay from ordertable) b
    on a.d=b.dd
    

    结果:
    从结果可以看到,月环比的计算逻辑:在原有的时间加上一个月与原表连接即可得到本月与上个月的信息。结果有几个月份是null,原因是我造的数据没有11月份的,所以才没有计算,这个可忽略。
    在这里插入图片描述
    2、月同比
    同比计算也很简单。同比这里是今年的N月,与去年的N月的比较。
    代码:
    逻辑没变,就是将月换成年即可。

    ##月同比
    select substr(a.d,1,7) as month ,a.d,a.orderpay,b.dd,b.originalday,b.orderpay,
    (a.orderpay-b.orderpay)/b.orderpay as month_rate
     from 
    (select DATE_FORMAT(CONCAT(datetime,'-01'),'%Y-%m-%d') as d ,orderpay  from ordertable) a  
    left join 
    (select DATE_ADD(DATE_FORMAT(CONCAT(datetime,'-01'),'%Y-%m-%d'),INTERVAL 1 year )as dd
     ,DATE_FORMAT(CONCAT(datetime,'-01'),'%Y-%m-%d')as originalday,orderpay from ordertable) b
    on a.d=b.dd
    

    结果:
    在这里插入图片描述

    展开全文
  • 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套哦~
    在这里插入图片描述

    展开全文
  • Impala sql实现同比计算(lag函数)

    千次阅读 2021-08-06 14:47:58
    同比的话,如果每个都齐全,都有数据lag(num,12)就可以了,空值的话,使用lag()函数的第三个参数。 select t2.index_name,t2.new_index_code,t2.now_value,t2.update_time, lag (t2.now_value, 12, 0) over ...

    一、同比

    与上年度同月数据对比称"同比",与上月数据对比称"环比"

    lag(col,n,default) 用于统计窗口内往上第n行值:
    第一个参数为列名,
    第二个参数为往上第n行(可选,默认为1) ,
    第三个参数为默认值(当往上第n行为null时候,取默认值,如不指定,则为null)

    同比的话,如果每个月都齐全,都有数据lag(num,12)就可以了,空值的话,使用lag()函数的第三个参数。

    
        select 
        
           t2.index_name,t2.new_index_code,t2.now_value,t2.update_time,
           lag (t2.now_value, 12, 0) over (ORDER BY t2.update_time) AS last_num 
        
        from(
                select t1.new_index_code, t1.index_name, t1.now_value, t1.update_time  from(
                       select *  from(
                            select 
                                   b.index_code as new_index_code,
                                   b.index_name,
                                   avg(a.value1) now_value,
                                   substr(updated_timestamp, 1,6) as update_time
                                
                            from gg_zbz a,globle_index_master_data  b
                            where  a.zbbm=b.index_code and  a.sczt='正常' or a.sjzt='正常' or a.sczt ='' or a.sjzt =''
                            group by update_time,new_index_code,index_name
                            
                        ) x where x.new_index_code='ZB0000139'  order by update_time desc
        
                 ) t1  order by t1.update_time desc
            ) t2 order by t2.update_time desc
    

    在这里插入图片描述
    now_value:今年当月的数据
    last_num:去年同月的数据

    使用以上方法,必须保证数据连续,没断层,若是出现缺失的月份,可以使用一下方法:

    
    select 
    
      a1.new_index_code,a1.index_name,a1.update_time, a1.today_value,b1.last_sum
    
    from  
    (
        select new_index_code,index_name,today_value,update_time, today_date,today_timp from(
        select 
               b.index_code as new_index_code,
               b.index_name,
               avg(a.value1) today_value,
               substr(updated_timestamp, 1,6) as update_time,
               concat(from_unixtime(unix_timestamp(updated_timestamp,'yyyyMMdd'),'yyyy-MM'),'-','01') as  today_date,
               unix_timestamp(concat(from_unixtime(unix_timestamp(updated_timestamp,'yyyyMMdd'),'yyyy-MM'),'-','01'),'yyyy-MM-dd') as today_timp
               
        from gg_zbz a,globle_index_master_data  b
        where  a.zbbm=b.index_code and  a.sczt='正常' or a.sjzt='正常' or a.sczt ='' or a.sjzt =''
        group by update_time,new_index_code,index_name,today_timp,today_date
        
        ) x where x.new_index_code='ZB0000139' 
    ) a1   
    
    left join
    
    (
        select new_index_code,index_name,last_sum,update_time,today_date, today_timp from(
        select 
               b.index_code as new_index_code,
               b.index_name,
               avg(a.value1) last_sum,
               substr(updated_timestamp, 1,6) as update_time,
               concat(from_unixtime(unix_timestamp(updated_timestamp,'yyyyMMdd'),'yyyy-MM'),'-','01') as  today_date,
               unix_timestamp(concat(from_unixtime(unix_timestamp(updated_timestamp,'yyyyMMdd'),'yyyy-MM'),'-','01'),'yyyy-MM-dd') as today_timp
               
        from gg_zbz a,globle_index_master_data  b
        where  a.zbbm=b.index_code and  a.sczt='正常' or a.sjzt='正常' or a.sczt ='' or a.sjzt =''
        group by update_time,new_index_code,index_name,today_timp,today_date
        
        ) x where x.new_index_code='ZB0000139' 
    ) b1
    
    on  a1.new_index_code=b1.new_index_code
    and day(a1.today_date) = day(b1.today_date)
    and month(a1.today_date) = month(b1.today_date)
    and year(add_months(a1.today_date,-12)) = year(b1.today_date)
    
    order by  a1.update_time  desc
    

    在这里插入图片描述
    参考于:https://blog.csdn.net/weixin_42279393/article/details/108405912

    展开全文
  • python计算公司销售额的同比增长率

    万次阅读 2018-11-10 11:32:40
    同比、环比一直在很多场合中广泛地被使用到,今天...比如说2017年8的产值100万,2018年8的产值300万,同比增长为:(300-100)÷100*100%=200% 同比增长率一般是指和上一年同期相比较的增长率。 某个指标的同...
  • ORACLE计算同比环比

    千次阅读 多人点赞 2020-07-06 14:19:18
    同比: 同比一般情况下是今年第n与去年第n比 环比: 表示连续2个统计周期(比如连续两)内的量的变化比。 同比增长率=(本期数-同期数)/|同期数|×100% 环比增长率=(本期数-上期数)/上期数×100% 需求: 计算...
  • SQL 求同比 环比

    万次阅读 2017-02-26 11:24:13
    or d.Sales=0 then '无穷大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end as 同比 from SalesDetail c left join (select a....
  • 关于SQL求同比、环比

    千次阅读 2020-09-22 09:49:21
    同比和环比的意思 同比 一般情况下是今年第n与去年第n比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。如,本期2比去年2,本期6比...
  • sql同比环比 简单示例

    千次阅读 2019-12-12 17:46:58
    同比:一般情况下是今年第n与去年第n比 创建一个简单的登录活动记录表 drop table if EXISTS logintime; create table logintime ( logincode VARCHAR(10), usercode VARCHAR(10), username VARCHAR...
  • sql语句下的同比,环比操作

    万次阅读 多人点赞 2020-07-01 00:44:26
    需求:查询2020年,每的销售额,以及同比环比,并按照年月进行升序排序 建数据库 建表 插入数据 偷个懒,这些语句就先省略了 给看个截图 ps: 建表时时间要选择datetime ,后面要对时间进行操作的~ 思路:分步操作 ...
  • Java计算同比环比

    千次阅读 2020-08-31 14:39:28
    Java计算同比环比 同比环比计算基本概念和计算公式 同比率:本年数据比上一年数据增长或减少的比率 同比率计算公式:rate = (本年数据 - 前一年数据) / 前一年数据 实例:2020年10游客数量为80W,2019年10游客...
  • 同比和环比的计算方式

    千次阅读 2019-10-05 11:05:53
    一、同比 了方便理解,我们使用2018年和2017年的数据来进行说明。 同比的概念。我们可以理解为:今年同期和去年同期的对比。 例如:2018年1与2017年1的数据对比。 计算公式 (2018年1数据-2017年1...
  • 一般来说,同比是本期统计数据和历史同时期的统计数据比较,例如2019年4和2018年4相比较,环比是本期统计数据和上一期的统计数据作比较,例如2019年4和2019年3相比较。环比侧重反映数据的短期趋势,会受到...
  • Tableau同比或环比计算方法

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

    千次阅读 热门讨论 2020-09-11 20:52:17
    预览 3、计算同比环比 sql如下: select year(c.销售时间) yy,month(c.销售时间) mm, sum(c.销售数量*d.产品单价) ss, concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss1)/ss1*100,2)),0),'%') 同比, ...
  • 统计表中常常以本年累计、上年同期(累计)、当期(例如当月)完成、上月完成为统计数据,并进行同比、环比分析。如下月报统计表所示样例,本文将使用Python Pandas工具进行统计。
  • 真题回顾 博主的一位朋友今天去面试,题目是这样的。...同比一般情况下是今年第n与去年第n比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速...
  • 同比、环比

    千次阅读 2019-04-24 23:27:09
    同比一般情况下是今年第n与去年第n比。如,本期2比去年2,本期6比去年6等。 同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。 计算公式...
  • 用PowerPivot计算销售总额的同比增长率和环比增长率。 要完成这一分析,我们需要4大步骤。 1.导入数据,创建关系 我们需要导入3张数据表,[01-订单明细]、[02-商品价格]、[03-日历表]。其中日历表中的日期列里日期...
  • Oracle求同比SQL

    千次阅读 2018-02-28 13:55:42
    同比一般情况下是今年第n与去年第n比。同比发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。如,本期2比去年2,本期6比去年6等。那么,我们求...
  • pandas计算环比与同比

    千次阅读 2019-08-21 09:08:44
    环比与同比是数据分析中最常用的计算方法之一,pandas内置的函数可以很方便的计算,其简单程度不亚于使用excel
  • SQL 同比、环比计算公式及实例演示

    千次阅读 2021-04-01 23:48:21
    同比:一般情况下是今年第n与去年第n比 计算方式:同比增长率=(本期数-同期数)÷同期数×100% 所以要有个本期数据与同期数据一一对应的表,那就要本期数据与同期数据分离 环比数据计算公式:环比:一般是指...
  • Pandas实现计算同比、环比

    千次阅读 2020-12-23 14:15:15
    各位小伙伴,在数据分析中,我们会经常用到同比、环比。那么学习了python以后,如何来通过Python Pandas来计算呢?这里废话不多说,直接上干货-代码!第一步:生成测试数据#生成测试数据import pandas as pdimport ...
  • 计算同比、环比的一些常识性问题

    千次阅读 2020-06-10 10:08:33
    在这种情况下就会产生一个问题,如果计算2020年01同比值的话,3400W/3000W -1 ,这样的话,就是那2020年的34家门店和2019年30家门店做对比,店数不一致,其实是没有可比性的,我们应该拿 2900W/3000W - 1,...
  • Power BI中计算同比、环比

    万次阅读 2019-06-25 14:28:13
    财务需求中经常要求计算数据的同比、环比,下面介绍如何在Power BI 中创建用来计算同比和环比的度量值(SSAS模型中同理)。。。 现在表中有金额,时间(时间需要年月日格式),计算同比 ...
  • 1. 问题描述日常处理销售相关的数据时,经常会遇到需要计算 同比、环比、定基比 的问题,计算方法是 「(当期 / 比较期 -1) * 100%」,在 Excel 中使用公式引用进行计算非常...
  • 窗口函数:计算环比和同比

    千次阅读 2019-03-27 12:45:47
    0 前言 环比,表示连续2个单位周期(比如连续两)内的量的... 同比一般情况下是今年第n与去年第n比,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度,计算公式:同比增长速度=(本期发展...
  • 同比、环比、YTD、MTD

    千次阅读 2021-06-11 14:08:38
    环比:某一时期内相邻的两个等长时段相比,例:去年五月同去年四月相比,今年第三季度同今年第二季度相比 同比=用今年减去年再除以去年/(本期数-同期数)÷同期数×100% 环比=用本月减上月再除以上月/(本期数-上期数)...
  • Oracle 同比、定比、环比分析

    千次阅读 2018-04-03 21:59:00
    "同比" ,   ((curmonth_sum - lastmonth_sum) / lastmonth_sum * 100)  "环比"   FROM   ( SELECT   t.salarymonth curmonth,  SUM   (t.salary) curmonth_sum,   ( SELECT   SUM   (t1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 379,616
精华内容 151,846
关键字:

如何算月同比