筛选近90天的信息,并对每个客户购买的次数进行统计,按商品分组:
SELECT c.product_id, b.uid, COUNT(1) num FROM tb_order_detail c LEFT JOIN tb_product_info a ON a.product_id = c.product_id LEFT JOIN tb_order_overall b ON b.order_id = c.order_id WHERE DATEDIFF(CURDATE(), DATE(event_time)) <= 90 AND a.tag = '零食' GROUP BY c.product_id, b.uid求出每个商品的复购率(购买次数>1),并按复购率倒序、商品ID升序排序:
SELECT product_id, round(sum(if(num>1,1,0))/count(1), 3) as repurchase_rate, ROW_NUMBER() OVER (ORDER BY round(sum(if(num>1,1,0))/count(1), 3) DESC, product_id ASC) rk FROM ( SELECT c.product_id, b.uid, COUNT(1) num FROM tb_order_detail c LEFT JOIN tb_product_info a ON a.product_id = c.product_id LEFT JOIN tb_order_overall b ON b.order_id = c.order_id WHERE DATEDIFF(CURDATE(), DATE(event_time)) <= 90 AND a.tag = '零食' GROUP BY c.product_id, b.uid ) m GROUP BY product_id最后取排序前3个:
SELECT product_id, repurchase_rate FROM ( SELECT product_id, round(sum(if(num>1,1,0))/count(1), 3) as repurchase_rate, ROW_NUMBER() OVER (ORDER BY round(sum(if(num>1,1,0))/count(1), 3) DESC, product_id ASC) rk FROM ( SELECT c.product_id, b.uid, COUNT(1) num FROM tb_order_detail c LEFT JOIN tb_product_info a ON a.product_id = c.product_id LEFT JOIN tb_order_overall b ON b.order_id = c.order_id WHERE DATEDIFF(CURDATE(), DATE(event_time)) <= 90 AND a.tag = '零食' GROUP BY c.product_id, b.uid ) m GROUP BY product_id ) n WHERE rk <= 3