通过代码:
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结束