Hive sql 每天场景题45
Posted 吃再多糖也不长胖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive sql 每天场景题45相关的知识,希望对你有一定的参考价值。
45、现有电商订单表(order_detail)如下。
order_id | user_id | product_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 | crp |
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
以上是关于Hive sql 每天场景题45的主要内容,如果未能解决你的问题,请参考以下文章