SQL练习题:网站每天有很多人登录,请你统计一下牛客每个日期新用户的次日留存率。

题目:

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

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

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

。。。

第4行表示id为2的用户在2020-10-13使用了客户端id为2的设备登录了牛客网,因为是第2次登录,所以是老用户

。。

最后1行表示id为4的用户在2020-10-15使用了客户端id为1的设备登录了牛客网,因为是第2次登录,所以是老用户

请你写出一个sql语句查询每个日期新用户的次日留存率,结果保留小数点后面3位数(3位之后的四舍五入),并且查询结果按照日期升序排序,上面的例子查询结果如下:

查询结果表明:

2020-10-12登录了3个(id为2,3,1)新用户,2020-10-13,只有2个(id为2,1)登录,故2020-10-12新用户次日留存率为2/3=0.667;

2020-10-13没有新用户登录,输出0.000;

2020-10-14登录了1个(id为4)新用户,2020-10-15,id为4的用户登录,故2020-10-14新用户次日留存率为1/1=1.000;

2020-10-15没有新用户登录,输出0.000;

(注意:sqlite里查找某一天的后一天的用法是:date(yyyy-mm-dd, '+1 day'),sqlite里1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5)

程序:

1)求出新用户第一天登录日期

SELECT user_id,MIN(date) AS date FROM login GROUP BY user_id

2) 算出有新用户登录的日期的新用户留存率

SELECT a.date,ROUND(COUNT(DISTINCT login.user_id)/ COUNT(a.user_id),3) AS p
FROM (
SELECT user_id,MIN(date) AS date FROM login GROUP BY user_id) AS a
LEFT JOIN login
ON login.user_id=a.user_id
AND login.date=DATE_ADD(a.date,INTERVAL 1 DAY)
GROUP BY a.date

3)用UNION补上没有新用户登录的日期

SELECT a.date, ROUND(COUNT(b.user_id) * 1.0 / COUNT(a.user_id), 3) AS p
FROM (SELECT user_id, MIN(date) AS dateFROM loginGROUP BY user_id
) aLEFT JOIN login bON a.user_id = b.user_idAND b.date = date_add(a.date, INTERVAL +1 DAY)
GROUP BY a.date
UNION
SELECT date, 0.000 AS p
FROM login
WHERE date NOT IN (SELECT MIN(date)FROM loginGROUP BY user_id
)
ORDER BY date;

每个日期新用户的次日留存率相关推荐

  1. 每日新增用户的次日留存率

    每日新增用户的次日留存率 第一种办法,传统解法: 先去重,然后3个join selectlog_day '日期',count(user_id_d0) '新增数量',count(user_id_d1) ...

  2. 全媒体运营师胡耀文教你:从Aha时刻来看新用户激活

    Aha时刻是新用户第一次认识到产品的价值,脱口而出"啊哈,原来这个产品可以帮我做这个".当花了大力气吸引来了一波新用户时,如何帮助留存转化,就要依靠Aha时刻. 2008年,当你宅 ...

  3. Excel 利用同期群分析计算新用户留存率

    业务分析方法中常用的有同期群分析,本文使用Excel和MySQL,结合同期群计算新注册用户的留存率,并放在实际的应用场景中进行分析. 一.简单介绍同期群分析 1.同期群分析(cohort analys ...

  4. mysql 用户留存率计算(每日新增DNU,次日留存率,3日留存率,7日留存率)

    我是先学习了这位大神留存率的写法,然后我自己完善了一下.@阿柯@ 首先声明一下留存的概念 次日留存:1月1日注册的新用户,在1月2日登陆了app.即登陆日期 - 注册日期 = 1天. 3日留存:1月1 ...

  5. 用户留存率是什么?如何用sql求出次日留存率?

    建表sql语句: drop table if exists liucunlv; create table liucunlv as select * from ( select 'a' as user_ ...

  6. SQL29 计算用户的平均次日留存率

    牛客网打卡:SQL29 计算用户的平均次日留存率 解题思路 题目给出的意思: 不考虑用户的答题情况,只考虑是否答题了 也就是选出两张表,第一张是当天的答题情况,第二张是第二天的情况 时刻理解新的虚拟表 ...

  7. 计算用户的平均次日留存率

    刷到的一道数据库题:计算用户的平均次日留存率 思路: 1.将同一张表连接起来(这里用 left join ,因为左表保留的是所有的刷题记录,右表保留的是第二天还来刷题的记录) 2.通过datediff ...

  8. Linux常用命令(中)、时间日期类、date 显示当前时间、ntpdate命令、cal 查看日历、useradd 添加新用户、passwd 设置用户密码、id 查看用户是否存在

    文章目录 1.3 时间日期类 1.3.1 date 显示当前时间 1.3.2 date 显示非当前时间 1.3.3 date 设置系统时间 1.3.4ntpdate命令 ntpdate常用服务器 国内 ...

  9. 用 SQL 分析不同用户群组留存率

    一.前言 用户增长对企业非常重要,主要包括: 新增.留存.召回 .留存率就是用户在某段时间内,开始使用某网站或APP,经过一段时间后仍然继续使用,这类群体就认为是留存用户,留存用户的占比即为留存率.N ...

最新文章

  1. 数据蒋堂 | 多维分析预汇总的存储容量
  2. 小黑小波比.404 (Not Found)
  3. 零基础Python学习路线图,小白的进阶之路!
  4. [网络安全自学篇] 三十四.Windows系统安全缺陷之5次Shift漏洞启动计算机机理分析
  5. 有关web接受管理邮件
  6. Qt phonon多媒体框架(转)
  7. 简单的方式优化mysql
  8. Java8 Stream详解~映射(map/flatMap)
  9. Google C++ style guide——命名约定
  10. JVM系列一:JVM内存组成及分配
  11. hadoop2.2.0 core-site.xml--global properties
  12. 深度探索ONNX模型部署
  13. 云闪付华为P9指纹_华为云闪付app指纹支付
  14. 计算机now函数,玩转NOW函数 日期时间随心变
  15. 服务开通语音通知功能如何实现?服务开通语音提醒功能实现方案
  16. 【Week7 作业B】TT的旅行日记
  17. Consul:7:Consul Connect使用示例(自动sideCar代理)
  18. 营业执照注册号是不是统一社会信用代码?
  19. 加拿大康考迪亚计算机工程,加拿大康考迪亚
  20. 瑞吉外卖项目——修改分类

热门文章

  1. java default类型_java – 带有限定符@Default的ZZZZ类型的不满意依赖项
  2. python 字符串replace函数_01-Python里字符串的常用操作方法--replace()函数
  3. php function curl token_最全PHP代码规范
  4. 计算机自爆命令,《我的世界》僵尸自爆指令一览 简单实用!
  5. mysql lvs 读写分离_mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
  6. c++运动学正反解 ros_ROS系统MoveIt玩转双臂机器人系列(六)–D-H逆运动学求解程序(C++)...
  7. linux服务器centos空间满的检查及解决方法
  8. 我的Linux系统开始学习的过程
  9. vue-cli-3.0 axios 配置
  10. .NET Core的文件系统[2]:FileProvider是个什么东西?