查询首次下单后第二天连续下单的用户比率
题目需求
从订单信息表(order_info)中查询首次下单后第二天仍然下单的用户占所有下单用户的比例,结果保留一位小数,使用百分数显示,期望结果如下:
percentage |
---|
70.0% |
代码实现
select
concat(round(sum(if(diff=1, 1, 0))/count(*)*100, 1), '%') percentage
from
(
select
user_id,
min(create_date) min_date,
max(create_date) max_date,
datediff(max(create_date), min(create_date)) diff
from
(
select
user_id,
create_date
from
(
select
user_id,
create_date,
rank() over (partition by user_id order by create_date) rk
from
(
select
user_id,
create_date
from order_info
group by user_id,create_date
)t1 -- 对用户进行去重:每个用户一天可能下多次订单,只取一次日期即可
)t2
where rk <= 2 -- 获取用户的前两次下单日期
)t3
group by user_id -- 获取用户第一次和第二次下单日期的差值
)t4; -- 如果差值为1,则为首次下单后第二天仍然下单的用户