背景:互联网公司,分析app上线后的效果,通常会通过很多指标来分析,其中一个指标就是留存率,留存率中最重要的就是次日留存,如果次日留存很高,说明这个app很成功,用户粘性高。

留存是怎么定义的呢?
  1. 一个用户第一天来了,第二天又来了,说明这个用户留存了。次日留存率就是100%
  2. 第一天来了100个用户,第二天这100用户中只有50个用户过来了,第三天这100个用户中只有30个用户过来了;那么次日留存率就是50/100×100=50%,3日留存率就是30/100×100=30%(比较的都是第一天这一批100用户)
我们来看看通过代码怎么计算留存率:
次日留存:

23号用户在24号的留存情况:

select t1.apptypeid,count(t1.uid) as active_users, --23号用户数count(t2.uid) as day2_active_users, --23号用户在24号的留存数concat(count(t2.uid)/count(t1.uid)*100,'%') as day2_active_user_rate, --23号用户在24号的留存率t1.dt
from
(selectapptypeid,uid,dt
from ods_center.ods_app_open
where dt='20211123'
group by apptypeid,uid,dt) t1left join
(selectapptypeid,uid,dt
from ods_center.ods_app_open
where dt='20211124'
group by apptypeid,uid,dt) t2
on t1.apptypeid=t2.apptypeid and t1.uid=t2.uid
group by t1.apptypeid,t1.dt;
次日、3日、7日留存:

18号用户在未来7天的留存情况:

select apptypeid,active_users, --18号用户数day2_active_users, concat(day2_active_users/active_users*100,'%') as day2_active_user_rate, --18号用户数的次日留存day3_active_users,concat(day3_active_users/active_users*100,'%') as day3_active_user_rate, --18号用户数的3日留存day4_active_users,concat(day4_active_users/active_users*100,'%') as day4_active_user_rate, --18号用户数的4日留存day5_active_users,concat(day5_active_users/active_users*100,'%') as day5_active_user_rate, --18号用户数的5日留存day6_active_users,concat(day6_active_users/active_users*100,'%') as day6_active_user_rate, --18号用户数的6日留存day7_active_users,concat(day7_active_users/active_users*100,'%') as day7_active_user_rate, --18号用户数的7日留存dt
from
(select t1.apptypeid,count(t1.uid) as active_users,count(case when datediff(t2.cu_dt,t1.cu_dt)=1 then t2.uid end) as day2_active_users,count(case when datediff(t2.cu_dt,t1.cu_dt)=2 then t2.uid end) as day3_active_users,count(case when datediff(t2.cu_dt,t1.cu_dt)=3 then t2.uid end) as day4_active_users,count(case when datediff(t2.cu_dt,t1.cu_dt)=4 then t2.uid end) as day5_active_users,count(case when datediff(t2.cu_dt,t1.cu_dt)=5 then t2.uid end) as day6_active_users,count(case when datediff(t2.cu_dt,t1.cu_dt)=6 then t2.uid end) as day7_active_users,t1.dt
from
(selectapptypeid,uid,dt,from_unixtime(unix_timestamp(dt,'yyyyMMdd'),'yyyy-MM-dd') as cu_dt
from ods_center.ods_app_open
where dt='20211118'
group by apptypeid,uid,dt,from_unixtime(unix_timestamp(dt,'yyyyMMdd'),'yyyy-MM-dd')) t1left join
(selectapptypeid,uid,dt,from_unixtime(unix_timestamp(dt,'yyyyMMdd'),'yyyy-MM-dd') as cu_dt
from ods_center.ods_app_open
where dt>'20211118' and dt<='2021124'
group by apptypeid,uid,dt,from_unixtime(unix_timestamp(dt,'yyyyMMdd'),'yyyy-MM-dd')) t2
on t1.apptypeid=t2.apptypeid and t1.uid=t2.uid
group by t1.apptypeid,t1.dt) t3

hive经典面试题2--次日留存、3日、7日留存怎么计算相关推荐

  1. Hive经典面试题——级联求和(访客访问统计报表)

    在大数据面试中,Hive知识的考察大部分会问级联求和,业务场景虽然有很多种,比如说,年收入,月收入统计:访客访问次数年统计,月统计.等等.但是基本根源知识是级联求和,本文就以访客访问统计为例. 1.基 ...

  2. hive经典面试题4--如何用分时数据计算分时累计数据?如何在分时累计数据为空的时候去补全数据?

    背景: 在互联网公司经常会用每10分钟为维度去统计某一个指标,这种统计我们称为分时数据.例如10分钟内某个渠道的安装数据,通过这个数据可以实时查看这个渠道质量好坏,如果这个渠道质量不行,那么就停止投放 ...

  3. Hive SQL经典面试题:统计连续登陆的三天及以上的用户

    Hive SQL经典面试题 最近发现一道大数据面试经常会问的SQL题目:统计连续登录的三天及以上的用户(或者类似的:连续3个月充值会员用户.连续N天购买商品的用户等),下面就来记录一下解题思路. 要求 ...

  4. 数仓经典面试题三:用户留存

    题目要求: 如何计算留存率 留存率是考察企业留住用户的能力,我们经常会计算次日留存.2日留存.7日留存等,如果现在让你用SQL实现,该怎么操作呢? 表部分数据如下: 留存数据字段说明: 用户id:用户 ...

  5. 面试题 I 28道数据分析师经典面试题!

    - 点击上方" i小码哥"订阅我吧!- 偏统计理论知识 1. 扑克牌54张,平均分成2份,求这2份都有2张A的概率. M表示两个牌堆各有2个A的情况:M=4(25!25!) N表示 ...

  6. 总结了28道数据分析经典面试题

    偏统计理论知识 1. 扑克牌54张,平均分成2份,求这2份都有2张A的概率. M表示两个牌堆各有2个A的情况:M=4(25!25!) N表示两个牌堆完全随机的情况:N=27!27! 所以概率为:M/N ...

  7. 李洪强iOS经典面试题153- 补充

    李洪强iOS经典面试题153- 补充   补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...

  8. Python工程师求职必知的经典面试题

    最近几年,学习Python语言的同学越来越多,学成之后大家对于后期的面试都遇到了很多难题,小编这次为大家整理了一份关于Python工程师求职必知的经典面试题!希望能够帮助到正在找Python工作的同学 ...

  9. 必读!53个Python经典面试题详解

    作者 | Chris 翻译 | 苏本如,编辑 | 夕颜 题图 | 视觉中国 出品 | AI科技大本营(ID:rgznai100) 本文列出53个Python面试问题,并且提供了答案,供数科学家和软件工 ...

最新文章

  1. [置顶] 安卓高手之路之 WindowManager
  2. 【背包】作业(jzoj 1986)
  3. 高精度人脸表情识别(附GitHub地址)
  4. 如何修改GitHub项目显示语言问题
  5. react.js从入门到精通(六)——路由的使用
  6. 单机 mysql 复制_MySQL单机复制
  7. 《Java线程与并发编程实践》—— 1.2 操作更高级的线程任务
  8. java整人的代码_「vbs代码」vbs表白代码+整人代码,抖音vbscript表白代码 - seo实验室...
  9. ASCII码对照表 包含二进制、十进制、十六进制
  10. 统计学习导论(ISLR)(二):统计学习概述
  11. 数学模型之最小二乘法
  12. 高性能软件系统设计中应该考虑的问题
  13. 记腾讯的暑期实习面试
  14. http和web服务器
  15. Java物联网企业级项目 亿可控系统分析与设计
  16. easypoi导出word文档(文本,表格)
  17. v-for里面再嵌套一个v-for的写法
  18. 服务器架构的演变过程
  19. android填空题界面的代码,Android 使用代码实现一个选词(拖拽)填空题
  20. ORB-SLAM2的源码阅读(一):系统的整体构建

热门文章

  1. Socket编程实现文件的传输
  2. 理解ARP及 Proxy ARP
  3. spring_让 spring自动扫描和管理bean
  4. 雷达多普勒频率计算公式_E-3“望楼”预警机雷达的工作方式
  5. python语言特点第三方库丰富_python语言的特点是什么?
  6. 1052. Linked List Sorting (25)
  7. 谷歌4年员工跑毒回国,面阿里惨遭秒拒
  8. Vue_框架入门级别
  9. 箭头函数为什么不能当做构造函数
  10. cf 923B Producing Snow