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题解

相关推荐
island13141 天前
【Redis#9】其他数据结构
数据结构·数据库·redis
言之。1 天前
Django REST框架:ModelViewSet全面解析
数据库·python·django
-Xie-1 天前
Mysql杂志(十四)——Mysql逻辑架构
数据库·mysql·架构
西贝爱学习1 天前
数据库系统概论的第六版与第五版的区别
数据库·oracle
岁忧1 天前
(LeetCode 每日一题) 3541. 找到频率最高的元音和辅音 (哈希表)
java·c++·算法·leetcode·go·散列表
emma羊羊1 天前
【SQL注入】延时盲注
数据库·sql·网络安全
一叶飘零_sweeeet1 天前
从 MySQL 到 TiDB:分布式数据库的无缝迁移与实战指南
数据库·mysql·tidb
axban1 天前
QT M/V架构开发实战:QStandardItemModel介绍
开发语言·数据库·qt
没学上了1 天前
数据库建立库-Qt
数据库
程序员小羊!1 天前
大数据电商流量分析项目实战:Spark SQL 基础(四)
大数据·sql·spark