MySql计算用户留存率

定义,每日新增的10个用户,在次日再次登陆有5个记为留存数5个,次日留存率为50%,在第七日还有3个,记为留存数3个,次日留存率为30%;

表1:hlj_user_base_info(用户注册表,记录用户注册信息);关键字段,user_id,device_id,register_time

表2:hlj_user_click_url_point (用户点击表,记录用户点击行为);关键字段,user_id,device_id,create_time

复制代码
 1 SELECT
 2   create_date
 3 , 新增用户数
 4 , concat(CAST(ROUND((100 * 次日留存) / 新增用户数,2) AS char), '%') 次日留存率
 5 , concat(CAST(ROUND((100 * 2日留存) / 新增用户数,2) AS char), '%') 2日留存率
 6 , concat(CAST(ROUND((100 * 3日留存) / 新增用户数,2) AS char), '%') 3日留存率
 7 , concat(CAST(ROUND((100 * 4日留存) / 新增用户数,2) AS char), '%') 4日留存率
 8 , concat(CAST(ROUND((100 * 5日留存) / 新增用户数,2) AS char), '%') 5日留存率
 9 , concat(CAST(ROUND((100 * 6日留存) / 新增用户数,2) AS char), '%') 6日留存率
10 , concat(CAST(ROUND((100 * 7日留存) / 新增用户数,2) AS char), '%') 7日留存率
11 FROM
12   (
13    SELECT
14      create_date
15    , count((CASE WHEN (day_diff = 0) THEN device_id END)) 新增用户数
16    , count((CASE WHEN (day_diff = 1) THEN device_id END)) 次日留存
17    , count((CASE WHEN (day_diff = 2) THEN device_id END)) 2日留存
18    , count((CASE WHEN (day_diff = 3) THEN device_id END)) 3日留存
19    , count((CASE WHEN (day_diff = 4) THEN device_id END)) 4日留存
20    , count((CASE WHEN (day_diff = 5) THEN device_id END)) 5日留存
21    , count((CASE WHEN (day_diff = 6) THEN device_id END)) 6日留存
22    , count((CASE WHEN (day_diff = 7) THEN device_id END)) 7日留存
23    FROM
24      (
25       SELECT
26         login_log.device_id
27       , create_date
28       , DATEDIFF(login_date, create_date) day_diff
29       FROM
30         ((
31          SELECT DISTINCT
32            STR_TO_DATE(create_time, '%Y-%m-%d') login_date
33          , device_id
34          FROM
35            hlj_user_click_url_point 
36       )  login_log
37       INNER JOIN (
38          SELECT DISTINCT
39            STR_TO_DATE(register_time, '%Y-%m-%d') create_date
40          , device_id
41          FROM
42            hlj_user_base_info 
43       )  create_log ON (login_log.device_id = create_log.device_id))
44    )  temp_1
45    GROUP BY create_date
46 )  temp_2
47 ORDER BY create_date ASC
复制代码

输出结果:

 

posted @   coderjim  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2022-08-16 宝塔面板无法修改文件权限为777如何解决?

更多知识请点击——

www.7017online.xyz
点击右上角即可分享
微信分享提示