SQL刷题---2021年11月每天新用户的次日留存率


解题思路:

1.首先算出每个新用户注册的日期,将其命名为表a

复制代码
select uid,min(date(in_time)) dt 
from tb_user_log
group by uid

2.计算出每个用户登录的天数,将其命名为表b

复制代码
select uid,date(in_time) dt from tb_user_log
union
select uid,date(out_time) dt from tb_user_log

3.以表a为主与表b进行连接,过滤条件为同一个用户在表b中的日期比表a中日期多一天,根据此结果计算留存率

复制代码
select 
    a.dt,
    ifnull(round(count(b.uid)/count(a.uid),2),0)uv_left_rate
from
    # 每个用户最初注册的日期
    (SELECT uid,date(min(in_time)) dt
    FROM tb_user_log
    GROUP BY uid) a 
# 把日期拆分成登陆和退出日期,再通过uid联立表
# 查找每个用户注册日期增加1天后的日期是否在登陆和退出日期当中
left join
    (
    SELECT uid,DATE(in_time) dt
    FROM tb_user_log
    union
    SELECT uid,DATE(out_time) dt
    FROM tb_user_log
    ) b 
ON a.uid = b.uid
# 每个uid在初次登陆日期的第二天
and b.dt = DATE_ADD(a.dt,INTERVAL 1 DAY)
# WHERE的时机,在全部表联合完之后进行筛选
WHERE a.dt like "2021-11%"
GROUP BY a.dt
ORDER BY a.dt;

SQL题解:SQL题解

相关推荐
gb42152873 小时前
向量数据库多模态特性
数据库
泡海椒4 小时前
数据占比展示:jquick-pdf饼图动态数据渲染PDF教程
数据库·oracle·pdf
大连好光景4 小时前
向量数据库的工作流程详解
数据库·milvus
catchadmin4 小时前
用 Jev 与 Laravel AI SDK 检测垃圾邮件和自动回复
数据库·人工智能·laravel
吠品5 小时前
CSS图片模糊过渡:一个transition加filter就够
java·数据库·notepad++
梦想不只是梦与想6 小时前
对象存储服务器vs数据库
数据库·对象存储·图片存储
Ivanqhz7 小时前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
Ivanqhz7 小时前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法
Java后端的Ai之路7 小时前
Python进阶探索23 - Python中的Time与Datetime模块
开发语言·数据库·python·datetime·time
通信瓦工9 小时前
利用浊度和电导率测量确定乙二醇基流体的质量
网络·数据库·ai