mysql统计用户留存_SQL 统计用户留存
问题描述
有一个用来记录每日客户消耗数据的表 t,它的表结构如下:
要求:
统计出头部客户、腰部客户、尾部客户在上个月(2020-06-01 ~ 2020-06-30)的留存情况。
输出结果的格式:
数据定义:头部客户:上个月消耗金额大于等于 30000 的客户;
腰部客户:上个月消耗金额在 10000 ~ 30000(不包含30000)的客户;
尾部客户:上个月消耗金额小于 10000 的客户;
留存:最近两个月(上个月和本月)消耗金额大于 0 的客户;
时间:上个月(2020-06-01 ~ 2020-06-30)、本月(2020-07-01 ~ 2020-07-31)。
解决方案
今天这个问题和我上一篇文章(SQL 订单揽收统计)里面的问题很相似,只不过这里要求多统计一列,因此,解决的思路也差不多。
下面我将用 CTE 来演示每个步骤。
第一步,计算出上个月每个客户的消耗金额。
with t1 AS
(SELECT
customer_id,
SUM(amount) AS amount
FROM
t
WHERE created_day BETWEEN '2020-06-01'
AND '2020-06-30'
GROUP BY customer_id)
SELECT * FROM t1
第二步,在第一步的基础上,统计头部客户、腰部客户、尾部客户的数量。
t2 AS
(SELECT
CASE
WHEN amount >= 30000
THEN 1
WHEN amount >= 10000
THEN 2
ELSE 3
END AS customer_level,
COUNT(*) AS customter_cnt
FROM
t1
GROUP BY customer_level)
SELECT * FROM t2
在脚本中使用代码 1、2、3 分别表示头部客户、腰部客户、尾部客户。
需要注意的是,在 GROUP BY 子句中使用了 SELECT 子句中的字段别名 customer_level,这种语法在 MySQL 上能编译通过,在其它数据库中则不行。
第三步,计算留存。根据留存的定义,只要客户在本月中有消耗,就计入留存数。比如客户 A,A 在上个月的消耗金额是 40000,那么 A 属于头部客户,假如 A 在本月的消耗金额大于 0,A 就为【留存】贡献了 1 。
我们在 t1 之后插入表达式 t12,t12 用来计算每个客户的消耗金额和留存状态,它的脚本如下:
t12 AS
(SELECT
t1.customer_id,
t1.amount,
IF(tmp.amount > 0, 1, 0) AS keep_state
FROM
t1
LEFT JOIN
(SELECT
customer_id,
SUM(amount) AS amount
FROM
t
WHERE created_day BETWEEN '2020-07-01'
AND '2020-07-31'
GROUP BY customer_id) tmp
ON tmp.customer_id = t1.customer_id)
SELECT * FROM t12
t12 中的左连接也可以改造成标量子查询。
完整的 SQL 实现:
with t1 AS
(SELECT
customer_id,
SUM(amount) AS amount
FROM
t
WHERE created_day BETWEEN '2020-06-01'
AND '2020-06-30'
GROUP BY customer_id),
t12 AS
(SELECT
t1.customer_id,
t1.amount,
IF(tmp.amount > 0, 1, 0) AS keep_state
FROM
t1
LEFT JOIN
(SELECT
customer_id,
SUM(amount) AS amount
FROM
t
WHERE created_day BETWEEN '2020-07-01'
AND '2020-07-31'
GROUP BY customer_id) tmp
ON tmp.customer_id = t1.customer_id),
t2 AS
(SELECT
CASE
WHEN amount >= 30000
THEN 1
WHEN amount >= 10000
THEN 2
ELSE 3
END AS customer_level,
COUNT(*) AS customter_cnt,
SUM(keep_state) AS keep_cnt
FROM
t12
GROUP BY customer_level)
SELECT
CASE
customer_level
WHEN 1
THEN '头部客户'
WHEN 2
THEN '腰部客户'
ELSE '尾部客户'
END AS '层级',
customter_cnt AS '客户数量',
keep_cnt AS '留存数量'
FROM
t2
ORDER BY customer_level
感兴趣的朋友可以尝试不使用左连接或者标量子查询的写法,而是只查一次 t 表就能实现需求。
mysql统计用户留存_SQL 统计用户留存相关推荐
- mysql 两字段相乘_sql统计2列相乘和语句.doc
sql统计2列相乘和语句 sql统计2列相乘和语句 篇一:sql统计2列相乘和语句 最近有网友提出"两数相除求余数 SQL语句怎么实现两列内容"等问题,小小知识站提取了各大知名网站 ...
- mysql本周 下周下月_sql 统计本周,本月,下周,下月sql语句
//本款sql 语句可以查询,本周,本月,下周,下月生日的相关数据 sql 统计本周,本月,下周,下月sql语句 /* 表结构 Student(S#,Sname,Sage,Ssex) --S# 学生编 ...
- 统计每天的新老用户,日活,周活,月活
版权声明:转载请注明出处! https://blog.csdn.net/ddxygq/article/details/81391718 最近有一个需求,统计每天的新老用户,日活,周活,月活. 我们每天 ...
- redis实现用户签到,统计活跃用户,用户在线状态,用户留存率
开发的过程中,可能会遇到用户签到.统计当天的活跃用户.以及每个用户的在线状态,用户留存率的开发需求,可能会用传统的方法,根据相应的需求设计数据库表等,但这样耗费的存储空间大,以及性能方面也不会太好,下 ...
- 基于多模型融合的用户画像分析统计方法研究
摘 要 随着信息技术的快速发展和大数据技术的广泛应用,企业的营销和产品的设计,对精细化.精准化的要求越来越高.主流的电商平台.搜索引擎以及短视频平台均推出了基于用户画像的个性化推荐服务,这其中相当一 ...
- CSDN是怎么实现用户签到,统计签到次数,连续签到天数等功能微服务的
文章目录 需求分析 设计思路 用户签到和统计连续签到的次数 签到控制层 SignController 签到业务逻辑层 SignService 测试 按月统计用户签到的次数 签到控制层 SignCont ...
- 企业微信怎么分享名片给用户?如何统计名片添加好友的效果?
企业微信本身有客户运营功能,能够帮助员工更便捷地沟通客户,服务客户.在运营客户前,我们需要在企业微信上添加客户,方法之一就是使用企业名片,让客户扫码进行添加.那么企业微信名片怎么分享给用户?如何统计名 ...
- 《用户思维 众创时代下的用户获取.体验.转化与留存》读书笔记
一.读书感悟 全书通篇论述九种形式的订购制的商业模式,包括其优点,九种订购制的具体内容等,在今天的互联网中均可找到对应的例子.其中涉及经济效益和用户体验的平衡.用户如何获取.转化与留存. 决胜90天新 ...
- Redis实战 - 09 Redis BitMaps 实现用户签到,统计签到次数,统计签到情况等功能
文章目录 1. 需求分析 2. 设计思路 3. 用户签到和统计连续签到的次数 1. 签到控制层 SignController 2. 签到业务逻辑层 SignService 3. 测试 4. 按月统计用 ...
最新文章
- torch.nn.functional.cross_entropy.ignore_index
- SAP QM 将业务上的偏差管理集成进入SAP系统?
- 20个开源项目助你快速掌握区块链应用开发,JS Go PHP Python Ruby
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(39)-在线人数统计探讨
- JZOJ 5701. 【gdoi2018 day2】第一题 谈笑风生(magic)
- BZOJ2299 [HAOI2011]向量 【裴蜀定理】
- 用python控制钉钉软件_Python—实现钉钉后台开发
- rxtx串口事件不触发_STM32F0单片机快速入门七 串口(UART)操作从轮询到中断
- TensorFlow 学习(七) — 常用函数 api、tf.nn、tf.keras
- Linux /boot分区空间不足
- vue-router页面传值及接收值
- 会计信息系统复习资料
- CH343串口驱动(包含各系统平台)
- JavaScript——操作表单(MD5验证)
- python 创建netcdf_如何用python netCDF4创建netCDF文件?
- 利用Python实现阴阳师自动抽卡
- [紧急]华展云再次连夜更新200余本16年会刊,2016年会刊量级已达全网第一
- Day04 利用flex布局完成PC端网页设计CSS+html部分
- Windows PowerShell简介
- 1471_TC275的内核种类以及ID判断
热门文章
- android app锁屏后定位,如何能让app在锁屏后还继续发送定位请求继续运行程序
- CAS:385437-57-0,DSPE-PEG-Biotin,磷脂-聚乙二醇-生物素用于生物分子的检测
- 离散系统频响特性函数freqz()
- Docker下运行两个ClickHouse容器后 ReplicatedMergeTree引擎借助Zookeeper将数据无法同步的解决方案,提示错误为“DNS_ERROR”
- IC卡读卡器卡号输出格式
- android编程绘制扇形,分析实现Android自定义View之扇形图
- cpu性能指标和测试工具
- 计算机学院毕业设计文化衫,超全毕业文化衫创意设计图案与素材整理!2017毕业班服设计图案!...
- MWC 2018火热开幕,AI取代手机成主角,华为超越苹果称霸!
- arduino蜂鸣器控制