题解 | #零食类商品中复购率top3高的商品#
零食类商品中复购率top3高的商品
https://www.nowcoder.com/practice/9c175775e7ad4d9da41602d588c5caf3
#需求:统计零食类商品中复购率top3高的商品 #输出:商品ID、复购率 #要求:tag为零食;复购率保留3为小数,倒序,商品ID升序输出;只输出复购率前三的商品信息 #复购率=近90天内有至少两次购买的人数/有购买的总人数;近90天指包含当天在内的90天 #拆分问题: #1、要用到的数据:product_id、tag、uid、event_time,表链接 #2、近90天内:event_time>=date_sub(max(event_time),interval 89 day) #3、是否为复购:if(count(event_time)>1,1,0) 加上聚合过商品和用户,得到的是每个用户对每个商品的行为记录,如果count>1,则表明他对该商品有多次记录,即有复购行为 select product_id,round(sum(w1)/count(uid),3) repurchase_rate from( select uid,product_id,if(count(event_time)>1,1,0) w1 from tb_order_detail join tb_product_info using(product_id) join tb_order_overall using(order_id) where tag="零食" and event_time>=(select date_sub(max(event_time),interval 89 day) from tb_order_overall) #这里条件中加了一层select,在于需求中要的是近90天内,需要从所有日期中筛选得出;如果直接where条件,则会带有前面对tag的筛选而不准确 group by uid,product_id ) e1 group by 1 order by 2 desc,1 limit 3