通过代码:

SELECT
    product_id,
    round(sum(if(buytimes > 1,1,0)) / count(buytimes),3) repurchase_rate
from(select
    uid,
    t_d.product_id product_id,
    count(*) buytimes
FROM
    tb_order_overall t_o
JOIN
    tb_order_detail t_d
ON
    t_o.order_id = t_d.order_id
join
    tb_product_info t_i
ON
    t_d.product_id = t_i.product_id
where
    tag = '零食'
    and event_time >= (SELECT DATE_SUB(MAX(event_time), INTERVAL 89 DAY) FROM tb_order_overall)
GROUP BY
    t_d.product_id,uid) t
GROUP BY
    product_id
order by
    repurchase_rate desc,
    product_id
limit 3

思路

问题:请统计零食类商品中复购率top3高的商品。

注:复购率指用户在一段时间内对某商品的重复购买比例

此处我们定义:某商品复购率 = 近90天内购买它至少两次的人数 ÷ 购买它的总人数

近90天指包含最大日期(记为当天)在内的近90天。结果中复购率保留3位小数,并按复购率倒序、商品ID升序排序

感觉没啥说的:

三表连接

然后筛出来tag = ‘零食’还有最近90天

event_time >= (SELECT DATE_SUB(MAX(event_time), INTERVAL 89 DAY) FROM tb_order_overall)

然后按照uid,商品id分组

计数大于2就是回购,否则就是只买一次

最后排序limit结束