以梧桐数据库为例讲解如何计算用户连续登录比率

embedded/2024/11/8 18:43:08/

一、背景说明

在这个竞争激烈的市场环境中,移动运营商不仅需要吸引新客户,还需要关注如何提高客户的留存率。保持客户持续使用套餐、提升客户粘性是衡量服务质量、客户满意度以及营销策略效果的重要指标。因此,分析客户首次办理套餐后的持续使用情况对于运营商是一个关键环节。

二、问题描述

现在有个业务场景需要分析用户连续登录行为,以便提供更好的用户粘性提升策略,请编写一个SQL查询,报告在用户首次登录后的第二天再次登录的用户比率,并将结果四舍五入到小数点后两位。 本次以梧桐数据库为例进行SQL实现及思路讲解。

三、表结构说明

梧桐数据库用户登录信息表建表语句

create table userlogins (user_id int,login_date date
);

四、表数据插入

通过insert语句向梧桐数据库插入样例数据

insert into userlogins
values (1, '2023-01-01'), (1, '2023-01-02'),(2, '2023-01-01'),(3, '2023-01-02'), (3, '2023-01-03');

数据插入后表结构如下:

user_idlogin_date
12023-01-01
12023-01-02
22023-01-01
32023-01-02
32023-01-03

五、sql实现思路分解

1、定义首次登录日期 2、确定第二天登录的用户 3、通过主查询计算第二天登录比率,并四舍五入至小数点后两位

六、sql实现

-- 定义首次登录日期
with firstlogin as (select user_id,min(login_date) as first_login_date  -- 对于每个用户,选取最早的登录日期作为首次登录日期from userlogins -- 从用户登录信息表中读取数据group by user_id  -- 按用户分组,确保每个用户的首次登录日期仅被计算一次
),
-- 确定第二天登录的用户
seconddaylogin as (select fl.user_id,count(*) as second_day_count -- 统计第二天登录的次数from firstlogin fljoin userlogins ul on fl.user_id = ul.user_id and fl.first_login_date + INTERVAL 1 DAY = ul.login_date -- 将 userlogins 表与 firstlogin CTE 进行内连接,条件是用户的 user_id 相同,并且 login_date 是首次登录日期之后的一天group by fl.user_id  -- 按用户分组,确保每个用户的第二天登录次数被正确统计
)
-- 计算第二天登录的比率
select round(sum(second_day_count) * 1.0 / count(distinct fl.user_id), 2) as login_ratio  -- 计算第二天登录比率,首先统计所有第二天登录的总次数 sum(second_day_count),然后除以所有用户的数量 count(distinct fl.user_id),最后使用 round 函数将结果保留两位小数
from firstlogin fl
left join seconddaylogin sdl on fl.user_id = sdl.user_id; -- 将 seconddaylogin CTE 与 firstlogin CTE 进行左连接,确保即使某些用户没有第二天登录记录也能出现在结果集中

七、sql每个部分的执行结果

定义首次登录日期

user_idfirst_login_date
12023-01-01
32023-01-02
22023-01-01

确定第二天登录的用户

user_idsecond_day_count
11
31

计算第二天登录的比率

login_ratio
0.67


http://www.ppmy.cn/embedded/135959.html

相关文章

你使用过哪些MySQL中复杂且使用不频繁的函数?

在MySQL中,除了常用的SELECT、INSERT、UPDATE等基本操作外,还有许多复杂且功能强大的函数,它们能够处理各种复杂的数据处理需求。这些函数虽然在日常开发中可能不常使用,但在特定场景下却能够发挥巨大的作用。下面,我将…

PHP弱类型安全问题

PHP弱类型安全问题主要源于PHP语言的弱类型特性,这种特性允许变量在不同类型之间自由转换,并在比较时进行自动的类型转换。以下是对PHP弱类型安全问题的简述: 一、弱类型特性 在PHP中,变量不需要事先声明类型,且可以…

网购选择困难症怎么破?别忘了你的这位“帮手”

每年双十一对不少人来说,既是购物剁手狂欢节,也是货比三家纠结得不行的选择困难症复发期。而现在,Pura 70 能够帮助我们解决不够了解商品、选择困难症等问题啦。 小艺圈选,圈出你感兴趣的商品,快速货比三家 利用指关…

2024年三个月自学手册 网络安全(黑客技术)

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、…

伦敦金价格是交易所公布的吗?

今年以来,伦敦金价格波动可谓是波澜壮阔,盘中屡次刷新历史新高,目前已经冲上了2700的历史大关。面对高歌猛进的伦敦金价格,投资者除了进行交易之外,还有一点相关方面的知识是想了解的。例如,伦敦金价格是交…

Redis 组网方式入门

文章目录 一、组网方式1. 单实例模式描述优点缺点适用场景 2. 主从复制模式(Master-Slave Replication)描述优点缺点适用场景基于docker的redis主从复制1. 配置主节点2. 配置从节点3. 查看节点状态4. 验证主从数据同步5. 查看同步进度 3. 哨兵模式&#…

11月3日笔记(根据凭据提权)

用户凭据操作 枚举 Unattended 凭据 无人值守(Unattended)安装允许应用程序在不需要管理员关注下自动安装。无人值守安装的问题是会在系统中残留一些配置文件,其中可能包含本地管理员的用户名和密码,常见的路径如下。 C:\sysprep.inf C:\syspreg\sysp…

1. pytorch 中冻结模型参数后参数仍会被调整

问题 self.sgf_net.requires_grad_(False)起初设置 requires_grad(False) 优化器也没有添加sgfnet的模型参数。但是在pylightning框架中,每次推理完模型的参数都会被改变,经过仔细排查发现问题 # self.sgf_net.requires_grad_(False)for param in self.s…