第3句 今日流失用户
需求:
当日流失用户的定义:昨天登录的,今天没登录的用户数
有一张用户登录日志表,有字段 date_stamp(日期时间戳),用户id(uid)。如果用户在某天登录了,该表会有一条记录。
#今天流失人数:昨天登录,今天没登录的
select a.date_stamp+86400 as date ,count(*) as num
from
user_date a
left join user_date b
on a.date_stamp = b.date_stamp -86400 and a.uid =b.uid
where b.date_stamp is null and a.date_stamp+86400 >=UNIX_TIMESTAMP('2023-08-01 00:00:00')
group by date
解析:
a 表和b表的连接条件是 uid相同 且时间戳相差一天,a 即前一天,b即当天。 如果流失了,则 a 存在而b不存在。查出结果之后 因为要算当天,a的时间戳需要加一天。
同理可以写出类似的 复活用户数(前一天未登录,当天登录)和 留存用户数(前一天和当天都登录的用户数)
注意点: 我们经常会用到 select x as y 这样的语句,但是这个 y 只能用在 group 子句,而where 后面是不可以的。
知识点: 表的多重连接条件
ps: 这个查询速度比较慢,欢迎大佬们提出优化建议
合集:
这些年写过的花式sql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?