我的想法:做两个表,一个是第一天的,一个是第二天的,两个表相连接(left join),利用count不计数空值,两个count相除得出留存率
由于我不知道第二天要怎么表达所以我问了文心一言
所以第一天和第二天的表连接应该为
question_practice_detail a
left join
question_practice_detail b
on a.device_id=b.device_id
and a.date=DATE_ADD(b.date,INTERVAL 1 DAY) #第一天来了第二天也来了就为1,第二天没来就是空值
最终代码:
select
count(b.date)/count(a.date) avg_ret
from question_practice_detail a
left join
question_practice_detail b
on a.device_id=b.device_id
and a.date=DATE_ADD(b.date,interval 1 DAY)
输出为
数值大了,说明count(b.date)大了
想想原因可能是因为原表没有清洗,没去重
所以我们把表去重下
看了下讨论区
也可以用date直接加减表达