牛客每天有很多人登录,请你统计一下牛客新登录用户的次日成功的留存率, 有一个登录(login)记录表,简况如下: id user_id client_id date 1 2 1 2020-10-12 2 3 2 2020-10-12 3 1 2 2020-10-12 4 2 2 2020-10-13 5 4 1 2020-10-13 6 1 2 2020-10-13 7 1 2 2020-10-14 第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备第一次新登录了牛客网 。。。 第4行表示user_id为2的用户在2020-10-12使用了客户端id为2的设备登录了牛客网 。。。 最后1行表示user_id为1的用户在2020-10-14使用了客户端id为2的设备登录了牛客网 请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入),上面的例子查询结果如下: p 0.500
时间: 2024-03-03 17:47:33 浏览: 71
牛客webserver服务器项目一个月速通
可以使用子查询和连接操作来计算新登录用户次日成功的留存率。具体的 SQL 语句如下:
```
SELECT ROUND(COUNT(DISTINCT t1.user_id, t2.date) / COUNT(DISTINCT t1.user_id), 3) AS p
FROM login t1
JOIN login t2 ON t1.user_id = t2.user_id AND DATE_ADD(t1.date, INTERVAL 1 DAY) = t2.date
WHERE t1.date = (SELECT MIN(date) FROM login);
```
该 SQL 语句中,首先使用子查询找出最早的登录记录日期;然后通过连接操作,将第一天登录的用户与第二天登录的用户进行匹配,找出次日成功的留存用户;最后根据留存率的计算公式,计算留存率并保留三位小数。
需要注意的是,该 SQL 语句中使用了 DATE_ADD 函数来计算日期相加后的日期,可以根据实际情况修改该函数的参数。同时,也需要注意保留小数位数的精度问题,可以根据需要修改 ROUND 函数的参数来指定精度。
阅读全文