步骤
1、连接3张表
2、筛选90天内的订单
3、ROW_NUMBER() over(PARTITION BY df2.product_id,df1.uid order by df1.event_time asc) as "rk"
查出购买每个产品的用户 当前订单是第几次购买
4、round(count(distinct case when rk >=2 then uid end)/count(distinct uid),3) as "复购率"
group by product_id
购买次数>=2的用户数 / 购买过的用户数 按产品id分组
SELECT
product_id,
#count(distinct uid) as "购买的人数",
#count(distinct case when rk >=2 then uid end) as "购买2次以上的人数",
round(count(distinct case when rk >=2 then uid end)/count(distinct uid),3) as "复购率"
from (
select
df1.uid,
df2.product_id,
ROW_NUMBER() over(PARTITION BY df2.product_id,df1.uid order by df1.event_time asc) as "rk"
from tb_order_overall as df1
left join (
select
df1.*,
df2.tag
from tb_order_detail as df1
left join tb_product_info as df2
on df1.product_id = df2.product_id
) as df2
on df1.order_id = df2.order_id
where df2.tag = '零食'
and df1.event_time >= (select date_add(max(event_time), interval -89 day) from tb_order_overall)
) as a
group by product_id
order by 复购率 desc,product_id asc
limit 3



京公网安备 11010502036488号