查看原文
其他

【大数据哔哔集20210128】使用Hive计算环比和同比

点击上方蓝色字体,选择“设为星标”

回复”资源“获取更多惊喜

什么是绝对值同比

本期数据-同期数据/|同期数据| 例:2019年1月1日的gmv -2018年1月1日的gmv/|2018年1月1日的gmv|

什么是绝对值环比

本期数据-上期数据/|上期数据| 例:2019年2月2日的gmv -2018年2月1日的gmv/|2018年2月1日的gmv|

数据集准备

建表语句

create table new_table(
dt string,
area string,
province string,
saleroom int
);

数据准备:

insert into new_table values('2017-12-01', 'hd', 'sh','3600000');
insert into new_table values('2017-12-02', 'hd', 'js','2800000');
insert into new_table values('2017-12-03', 'hd', 'zj','4500000');
insert into new_table values('2017-12-04', 'hb', 'bj','3000000');
insert into new_table values('2017-12-05', 'hb', 'tj','2800000');
insert into new_table values('2018-12-01', 'hd', 'sh','3000000');
insert into new_table values('2018-12-02', 'hd', 'js','2000000');
insert into new_table values('2018-12-03', 'hd', 'zj','2500000');
insert into new_table values('2018-12-04', 'hb', 'bj','2600000');
insert into new_table values('2018-12-05', 'hb', 'tj','1500000');

同比计算

with tmp as (
select
dt,
area,
province,
saleroom,
lag(saleroom,1,0) over(partition by concat(month(dt),"-",day(dt)),area,province order by dt asc) pre_sale
from new_table)
select
dt,area,province,saleroom,pre_sale,
if(round((saleroom-pre_sale)/abs(pre_sale)*1.00,2) is null,100,round((saleroom-pre_sale)/abs(pre_sale)*1.00,2)*100)
from tmp;

环比计算

with tmp as (
select
dt,
area,
province,
saleroom,
lag(saleroom,1,0) over(partition by concat(month(dt),"-",day(dt)),area,province order by dt asc) pre_sale
from new_table)
select
dt,area,province,saleroom,pre_sale,
if(round((saleroom-pre_sale)/abs(pre_sale)*1.00,2) is null,100,round((saleroom-pre_sale)/abs(pre_sale)*1.00,2)*100)
from tmp ;



【大数据哔哔集20210127】Kafka企业搭建之核心参数详解

【大数据哔哔集20210126】全图呈现美团酒旅数据治理实践

【大数据哔哔集20210125】Kafka将逐步弃用对zookeeper的依赖

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存