大数据SQL题45 复购率问题

原题链接:http://practice.atguigu.cn/#/question/45/desc?qType=SQL

题目需求

现有电商订单表(order_detail)如下。

order_id(订单id)user_id(用户id)product_id(商品id)price(售价)cnt(数量)order_date(下单时间)
111500012022-01-01
213550012022-01-02
3173522022-02-01
422380032022-03-03

注:复购率指用户在一段时间内对某商品的重复购买比例,复购率越大,则反映出消费者对品牌的忠诚度就越高,也叫回头率

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

近90天指包含最大日期(以订单详情表(order_detail)中最后的日期)在内的近90天。结果中复购率保留2位小数,并按复购率倒序、商品ID升序排序。

期望结果如下:

product_id(商品id)cpr<decimal(16,2)>(复购率)
31.00
91.00
80.50
50.33
70.25
10.00
20.00
60.00

解题思路

SELECT  product_id,
        cast(SUM(IF(purchase_cnt >= 2,1,0))/SUM(1) AS decimal(16,2)) AS cpr
FROM
(
	SELECT  product_id,
	        user_id,
	        COUNT(1) AS purchase_cnt
	FROM
	(
		SELECT  product_id,
		        order_date,
		        user_id,
		        MAX(order_date) OVER () AS max_date
		FROM order_detail
	) t1
	WHERE DATEDIFF(max_date, order_date) < 90
	GROUP BY  product_id,
	          user_id
) t1
GROUP BY  product_id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值