当前位置: 首页 > news >正文

Hive SQL必刷练习题:留存率问题

首次登录算作当天新增,第二天也登录了算作一日留存。可以理解为,在10月1号登陆了。在10月2号也登陆了,那这个人就可以算是在1号留存

今日留存率 = (今日登录且明天也登录的用户数) / 今日登录的总用户数 * 100%

在这里插入图片描述

解决思路:

​ 这类问题主要借助left join,根据原表的数据,先去找到每个用户最先登录的时间,这个就是通过对用户group by,然后搜索date_format(min(login_ts),‘yyyy-MM-dd’)。这样就得到一个表,第一列是用户id,第二列就是每一个用户第一次登录的日期。

​ 之后用这个新表,left join原表数据,但是这个条件不仅是id相等,还要有个t1.user_id=t2.user_id and datediff(date_format(t2.login_ts,‘yyyy-MM-dd’),t1.first_login)=1

说实话,这个多条件join的还确实没遇到过。这样符合条件的就会被增加到后面,不符合的赋空值。【当然也可以不多条件join,直接就是两个表的user_id一样,那这样再计算新增人数和留存人数的时候,就不能直接通过count(列名字)来计算了,还需要去重和判断天数关系】比如下图这样

在这里插入图片描述

​ 这样就可以根据first_login分组group by计算count(t1.id),就是每日新增人数,然后count(连接上的表的列信息),就是后续一天也登陆的人数。

代码:

selectt3.first_login,t3.register,t3.remain_1/t3.register retention
from(selectt1.first_login,count(t1.user_id) register,count(t2.user_id) remain_1from(selectuser_id,date_format(min(login_ts),'yyyy-MM-dd')   first_loginfromuser_login_detailgroup byuser_id)t1left joinuser_login_detail t2ont1.user_id=t2.user_id and datediff(date_format(t2.login_ts,'yyyy-MM-dd'),t1.first_login)=1group byt1.first_login
)t3

总结一下:

其实这类问题的关键在于,你要想办法将每个用户的最初登录时间和第二天登录时间这两个信息,放到一行中。这就是先求出来初次登陆时间后,然后借助这个表进行left join,之后再此基础上以最初登录时间进行分组group by,再用聚合函数即可。

http://www.lryc.cn/news/521653.html

相关文章:

  • 虚拟同步机(VSG)Matlab/Simulink仿真模型
  • 单头注意力机制(SHSA)详解
  • 【漏洞分析】DDOS攻防分析
  • JavaScript动态渲染页面爬取之Splash
  • 慧集通(DataLinkX)iPaaS集成平台-系统管理之UI库管理、流程模板
  • OpenCV相机标定与3D重建(59)用于立体相机标定的函数stereoCalibrate()的使用
  • 摄像头模块在狩猎相机中的应用
  • ruoyi-cloud docker启动微服务无法连接nacos,Client not connected, current status:STARTING
  • 代码随想录算法训练营第三十四天-动态规划-63. 不同路径II
  • 在一个sql select中作多个sum并分组
  • 家用电路频繁跳闸的原因及解决方法!
  • 我的年度总结
  • ASP.NET Core 多环境配置
  • docker 安装mongodb
  • 完整地实现了推荐系统的构建、实验和评估过程,为不同推荐算法在同一数据集上的性能比较提供了可重复实验的框架
  • DRV8311三相PWM无刷直流电机驱动器
  • Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)
  • 机器学习-归一化
  • Linux 串口检查状态的实用方法
  • Qt的核心机制概述
  • 微调神经机器翻译模型全流程
  • Cesium加载地形
  • gitlab runner正常连接 提示 作业挂起中,等待进入队列 解决办法
  • C#对动态加载的DLL进行依赖注入,并对DLL注入服务
  • HDMI接口
  • A/B 测试:玩转假设检验、t 检验与卡方检验
  • 第143场双周赛:最小可整除数位乘积 Ⅰ、执行操作后元素的最高频率 Ⅰ、执行操作后元素的最高频率 Ⅱ、最小可整除数位乘积 Ⅱ
  • 【STM32】LED状态翻转函数
  • uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?
  • 汽车 SOA 架构下的信息安全新问题及对策漫谈