为了计算方便在dws层生产一张每日销售数据
-- 创建一张日期维度表,存放日期相关维度
-- 在订单宽表上增加日期对应维度信息如。订单日,订单周,订单周开始时间,订单月,订单季度,订单年
DROP TABLE IF EXISTS dws.dws_trade_orders_w;
create table if not exists dws.dws_trade_orders_w(
orderid string, -- 订单id
cat_3rd_id string, -- 商品三级分类id
thirdname string, -- 商品三级分类名称
secondname string, -- 商品二级分类名称
firstname string, -- 商品一级分类名称
shopid string, -- 店铺id
shopname string, -- 店铺名
regionname string, -- 店铺所在大区
cityname string, -- 店铺所在城市
paymethod tinyint, -- 支付方式
productsnum bigint, -- 商品数量
paymoney double, -- 订单明细金额
paytime string, -- 订单时间
pay_wek string,-- 订单所在周
pay_mon string,-- 订单所在月
pay_quarter string,-- 订单所在季
pay_year string,-- 订单所在年
is_hol_day int,-- 是否节假日
is_wek_day -- 是否休息日
) p
artitioned by (dt string)
STORED AS PARQUET;
统计2020年每个季度的销售订单笔数、订单总额
select
pay_quarter, --季度
count(distinct orderid),-- 订单数
sum(paymoney*productsnum) -- 订单金额
from
dws.dws_trade_orders_w
where dt='$do_date'
group by pay_quarter
统计2020年每个月的销售订单笔数、订单总额
select
pay_mon, --月度
count(distinct orderid),-- 订单数
sum(paymoney*productsnum) -- 订单金额
from
dws.dws_trade_orders_w
where dt='$do_date'
group by pay_mon
统计2020年每周(周一到周日)的销售订单笔数、订单总额
select
pay_wek, --周
count(distinct orderid),-- 订单数
sum(paymoney*productsnum) -- 订单金额
from
dws.dws_trade_orders_w
where dt='$do_date'
group by pay_wek
统计2020年国家法定节假日、休息日、工作日的订单笔数、订单总额
select
count(distinct case when is_hol_day =1 then orderid end ), -- 国家法定节假日订单笔数
sum(case when is_hol_day =1 then paymoney*productsnum end),-- 国家法定节假日订单总额
count(distinct case when is_wek_day =1 then orderid end ), -- 休息日订单笔数
sum(case when is_hol_day =1 then paymoney*productsnum end), -- 休息日订单总额
--工作日订单笔数
count(distinct case when is_hol_day =0 and is_wek_day=0 then orderid end),
-- 工作日订单总额
sum(case when is_hol_day =0 and is_wek_day=0 then paymoney*productsnum end)
from
dws.dws_trade_orders_w
where year(dt)='2020'