Hive sql 每天场景题45

45、现有电商订单表(order_detail)如下。

order_id
(订单id)

user_id
(用户id)

product_id
(商品id)

price
(售价)

cnt
(数量)

order_date
(下单时间)

1

1

1

5000

1

2022-01-01

2

1

3

5500

1

2022-01-02

3

1

7

35

2

2022-02-01

4

2

2

3800

3

2022-03-03

注:复购率指用户在一段时间内对某商品的重复购买比例,复购率越大,则反映出消费者对品牌的忠诚度就越高,也叫回头率

此处我们定义:某商品复购率 = 近90天内购买它至少两次的人数 ÷ 90天内购买它的总人数

近90天指包含最大日期(以订单详情表(order_detail)中最后的日期)在内的近90天。结果中复购率保留2位小数,并按复购率倒序、商品ID升序排序。

期望结果如下:

product_id
<int>
(商品id)

crp
<decimal(16,2)>
(复购率)

3

1.00

9

1.00

8

0.50

5

0.33

7

0.25

1

0.00

2

0.00

6

0.00

代码

	with t1 as (
	select 
	-- 90天内每个人购买各种商品的次数
	product_id
	,user_id
	,count(*) as cost_cnt
	from (select
	-- 找出90天前日期
	*
	,date_sub(max(order_date) over(),90)as mindate
	from order_detail
	)a
	where order_date >= mindate
	group by 
	product_id
	,user_id
	)
select 
product_id
,cast(sum(if(cost_cnt>=2,1,0))/count(distinct user_id) as decimal(15,2)) as cpr
from t1
group by product_id
order by cpr desc,product_id asc 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值