mysql 次日留存_新登录用户的次日成功的留存率

牛客每天有很多人登录,请你统计一下牛客新登录用户的次日成功的留存率,

有一个登录(login)记录表,简况如下:

86fc3da37188f8b662864658e92317d6.png

第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备第一次新登录了牛客网

。。。

第4行表示id为3的用户在2020-10-12使用了客户端id为2的设备登录了牛客网

。。。

最后1行表示id为1的用户在2020-10-14使用了客户端id为2的设备登录了牛客网

请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入),上面的例子查询结果如下:

27481734b21eaeabfb0fc5960a14e67e.png

查询结果表明:

id为1的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存

id为2的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存

id为3的用户在2020-10-12第一次新登录了,在2020-10-13没登录了,算是失败的留存

id为4的用户在2020-10-13第一次新登录了,在2020-10-14没登录了,算是失败的留存

固次日成功的留存率为 2/4=0.5

(sqlite里查找某一天的后一天的用法是:date(yyyy-mm-dd, '+1 day'),四舍五入的函数为round,sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5

mysql里查找某一天的后一天的用法是:DATE_ADD(yyyy-mm-dd,INTERVAL 1 DAY),四舍五入的函数为round)

找到表中每个id的登录最小时间,并加上1天构造新表。

如果login中id,date数据存在于这个新表中,就说明这个用户是留存的

select

round(count(distinct user_id)*1.0/(select count(distinct user_id) from login),3)fromloginwhere (user_id,date) in(select user_id,DATE_ADD(min(date),INTERVAL 1 DAY) from login group by user_id)

定义和用法

DATE_ADD() 函数向日期添加指定的时间间隔。

语法

DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

type 参数可以是下列值:

MICROSECOND

SECOND

MINUTE

HOUR

DAY

WEEK

MONTH

QUARTER

YEAR

SECOND_MICROSECOND

MINUTE_MICROSECOND

MINUTE_SECOND

HOUR_MICROSECOND

HOUR_SECOND

HOUR_MINUTE

DAY_MICROSECOND

DAY_SECOND

DAY_MINUTE

DAY_HOUR

YEAR_MONTH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值