• HiveSQL用户留存率


    留存分析一般包含新增留存和活跃留存分析。

    新增留存分析是分析某天的新增用户中,有多少人有后续的活跃行为。活跃留存分析是分析某天的活跃用户中,有多少人有后续的活跃行为。

    留存分析是衡量产品对用户价值高低的重要指标。

    此处要求统计新增留存率,新增留存率具体是指留存用户数与新增用户数的比值,例如2020-06-14新增100个用户,1日之后(2020-06-15)这100人中有80个人活跃了,那2020-06-14的1日留存数则为80,2020-06-14的1日留存率则为80%。

    要求统计每天的1至7日留存率,如下图所示。

    1.表结构

     

    2.数据来源

    取用户末次登录

     

     取用户注册日期

    实现:

    1)获取13日所有新增用户

    1. select
    2. user_id
    3. from
    4. dwd_user_register_inc
    5. where dt = '2020-06-13'

     2)获取留存用户(注册日期为13末次登录日期为14)

    (1)获取截至14日所有用户的末次登录日期

    1. select
    2. user_id,
    3. login_date_last
    4. from
    5. dws_user_user_login_td
    6. where dt = '2020-06-14'

    (2)新增用户join所有用户(14日所有用户内包含13日新增且留存的)

    1. select count(*)
    2. from
    3. (
    4. select
    5. user_id
    6. from
    7. dwd_user_register_inc
    8. where dt = '2020-06-13'
    9. ) t1
    10. join
    11. (
    12. select
    13. user_id,
    14. login_date_last
    15. from
    16. dws_user_user_login_td
    17. where dt = '2020-06-14')
    18. t2 on t1.user_id = t2.user_id

    (3)判断13日注册的且14日活跃的

    1. select count(*),
    2. sum(`if`(login_date_last = '2020-06-14', 1, 0))
    3. from (
    4. select user_id
    5. from dwd_user_register_inc
    6. where dt = '2020-06-13'
    7. ) t1
    8. join
    9. (
    10. select user_id,
    11. login_date_last
    12. from dws_user_user_login_td
    13. where dt = '2020-06-14') t2 on t1.user_id = t2.user_id

     (4)字段补齐

    1. select '2020-06-14' dt, --统计日期,
    2. '2020-06-13' create_date, --用户新增日期
    3. 1 retention_day, --截至当前日期留存天数
    4. sum(`if`(login_date_last = '2020-06-14', 1, 0)) retention_count, --留存用户数量
    5. count(*) new_user_count, --新增用户数量
    6. sum(`if`(login_date_last = '2020-06-14', 1, 0)) / count(*) retention_rate --留存率
    7. from (
    8. select user_id
    9. from dwd_user_register_inc
    10. where dt = '2020-06-13'
    11. ) t1
    12. join
    13. (
    14. select user_id,
    15. login_date_last
    16. from dws_user_user_login_td
    17. where dt = '2020-06-14') t2 on t1.user_id = t2.user_id

     2)获取12日两日留存

    1. select '2020-06-14' dt, --统计日期,
    2. '2020-06-12' create_date, --用户新增日期
    3. 2 retention_day, --截至当前日期留存天数
    4. sum(`if`(login_date_last = '2020-06-14', 1, 0)) retention_count, --留存用户数量
    5. count(*) new_user_count, --新增用户数量
    6. sum(`if`(login_date_last = '2020-06-14', 1, 0)) / count(*) retention_rate --留存率
    7. from (
    8. select user_id
    9. from dwd_user_register_inc
    10. where dt = '2020-06-12'
    11. ) t1
    12. join
    13. (
    14. select user_id,
    15. login_date_last
    16. from dws_user_user_login_td
    17. where dt = '2020-06-14') t2 on t1.user_id = t2.user_id

     依次类推获取七日

    每日聚合逻辑相同、计算内容不同

    group by分组:对不同组的数据进行相同的聚合处理

    1)获取7-13日所有新增用户的分区

    1. select user_id,create_time create_date
    2. from dwd_user_register_inc
    3. where dt >= date_add('2020-06-14', -7)
    4. and dt < '2020-06-14'

    2)对注册日期进行分组

    1. select sum(`if`(login_date_last = '2020-06-14', 1, 0)) retention_count, --留存用户数量
    2. count(*) new_user_count, --新增用户数量
    3. sum(`if`(login_date_last = '2020-06-14', 1, 0)) / count(*) retention_rate --留存率
    4. from (
    5. select user_id, create_time create_date
    6. from dwd_user_register_inc
    7. where dt >= date_add('2020-06-14', -7)
    8. and dt < '2020-06-14'
    9. ) t1
    10. join
    11. (
    12. select user_id,
    13. login_date_last
    14. from dws_user_user_login_td
    15. where dt = '2020-06-14') t2 on t1.user_id = t2.user_id
    16. group by create_date

    3)字段补齐

    1. select '2020-06-14' dt, --统计日期,
    2. create_date, --用户新增日期
    3. datediff('2020-06-14', create_date) retention_day, --截至当前日期留存天数 当天日期-用户新增日期
    4. sum(`if`(login_date_last = '2020-06-14', 1, 0)) retention_count, --留存用户数量
    5. count(*) new_user_count, --新增用户数量
    6. sum(`if`(login_date_last = '2020-06-14', 1, 0)) / count(*) retention_rate --留存率
    7. from (
    8. select user_id, dt create_date
    9. from dwd_user_register_inc
    10. where dt >= date_add('2020-06-14', -7)
    11. and dt < '2020-06-14'
    12. ) t1
    13. join
    14. (
    15. select user_id,
    16. login_date_last
    17. from dws_user_user_login_td
    18. where dt = '2020-06-14') t2 on t1.user_id = t2.user_id
    19. group by create_date

  • 相关阅读:
    Ajax
    微信小程序2022年发展方向曝光
    Git——解决 TortoiseGit 提示 No supported authentication methods available 错误
    【yum自动解决包依赖】linux离线安装rpm包及其依赖和卸载包及其依赖
    负载均衡器 OpenELB ARP 欺骗技术解析
    Python 基于人脸识别的实验室智能门禁系统的设计,附可视化界面
    Jmeter上传文件的文件名中文乱码解决方法
    C++map和set
    【C++】智能指针
    Nuxt.js 生成sitemap站点地图文件
  • 原文地址:https://blog.csdn.net/asd623444055/article/details/125340394