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