SELECT product_id,
    ROUND(COUNT(IF(purchase_cnt > 1, uid, NULL)) / COUNT(uid), 3) AS repurchase_rate
FROM (
    SELECT product_id, uid,
        COUNT(product_id) AS purchase_cnt
    FROM tb_product_info
        JOIN tb_order_detail
        USING(product_id)
        JOIN tb_order_overall
        USING(order_id)
    WHERE status = 1
        AND DATEDIFF((SELECT MAX(DATE(event_time)) FROM tb_order_overall), DATE(event_time)) < 90
        AND tag = '零食'
    GROUP BY product_id, uid
) user_purchase_t
GROUP BY product_id
ORDER BY repurchase_rate DESC, product_id
LIMIT 3