1、理解题意:
①统计 “零食类” 商品中 “复购率top3” 高的商品;
②复购率 = “近90天内” 购买它 “至少两次” 的人数 ÷ 购买它的总人数
③“近90天”:包含最大日期(记为当天)在内的近90天
③复购率保留3位小数,并按复购率倒序、商品ID升序排序

2、实操
(1)第一步
③挑选需求的字段(展示每位用户购买产品的数量信息,并用if判断1位用户是否购买了1个商品 ≥ 2次)
select t1.uid,t2.product_id,
if(count(t1.uid) >= 2,1,0) as repurchase

①确定需求来源的数据表
from tb_order_overall as t1
left join tb_order_detail as t2
on t1.order_id = t2.order_id
left join tb_product_info as t3
on t2.product_id = t3.product_id

②对数据表尽可能进行条件筛选:Ⅰ、零食的tag;Ⅱ、近90天(date_sub函数:从指定日期,减去指定日期间隔 VS date_add)
where t3.tag = '零食'
and t1.event_time >= (select date_sub(max(event_time),interval 89 day) from tb_order_overall)

group by 1,2

结果展示:
1	101|8002|1	
2	102|8003|1	
3	102|8001|1	
4	101|8003|0	
5	105|8002|0	
6	104|8003|0	

(2)第二步
①根据展示结果需求,挑选展示字段(复购率分子 = 购买1件商品 >= 2件的用户人数;复购率分母 = 总商品购买的用户人数;结果中复购率保留3位小数)
select t4.product_id,
round(sum(repurchase) / count(repurchase),3) as repurchase_rate

from(
第一步处理结果
) as t4
group by 1

②按复购率倒序、商品ID升序排序
ORDER BY repurchase_rate DESC, product_id
③只展示复购率top3高的商品
LIMIT 3