当前位置: 首页 > news >正文

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

一、背景说明

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

二、问题描述

现在有个业务场景需要分析用户连续登录行为,以便提供更好的用户粘性提升策略,请编写一个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.mrgr.cn/news/68574.html

相关文章:

  • 数字化转型必看!华为数字化最全合集(192页PDF限免下载 )
  • AWS S3 JavaScript SDK(v3)常用操作
  • Python代码解析:处理JSON数据并导入Neo4j数据库
  • C#的Event事件示例小白级剖析
  • 【LwIP源码学习4】主线程tcpip_thread
  • 实战攻略 | ClickHouse优化之FINAL查询加速
  • 头戴式耳机百元价位推荐?2024头戴式耳机性价比推荐
  • java中函数式接口
  • Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法
  • C++:( ͡• ͜ʖ ͡• )详解类型转换运算
  • 文件内的函数的定义和调用,函数内的函数定义和调用
  • 技术路线图用什么画?10个好用的模板盘点推荐!
  • 【通义灵码】AI编码新时代
  • springboot安财餐饮管理系统-计算机设计毕业源码59177
  • Linux Centos7 如何安装图形化界面
  • 商淘云连锁企业管理五大功能 收银系统助力门店进销存同步
  • 如何在Windows中检查是否安装了GPU
  • Visual Studio Code 端口转发功能详解
  • C++初阶——string类
  • 【JS】this关键字的相关问题
  • C语言实验 循环结构
  • YOLOv7-0.1部分代码阅读笔记-experimental.py
  • 使用STM32F407xx的GPIO引脚实现跑马灯效果的详细步骤
  • Linux进程通信之管道
  • oracle数据坏块处理(三)-数据抽取插入到新表中
  • RHCE—web服务器