mysql留存率除了存储过程_基于MySQL分析线上充值留存率
1.数据清洗
步骤:
1.查询charge_record表业务类型为充值且订单状态为成功的数据
2.将上述数据转移到本地数据库
使用如下脚本:
# coding=utf-8
import pymysql
# 原数据库链接
db1 = pymysql.connect(
host=‘***‘,
port=3306, user=‘***‘,
passwd=‘***‘,
db=‘***‘,
charset=‘utf8‘)
cursor1 = db1.cursor()
# 定义查询语句
len1 = cursor1.execute(‘select uid,update_time from charge_record where buss_type=0 and charge_status=2 and charge_prod_id is not null‘)
# 迁移数据库链接
db2 = pymysql.connect(
host=‘127.0.0.1‘,
port=3306, user=‘root‘,
passwd=‘123456‘,
db=‘test‘,
charset=‘utf8‘)
cursor2 = db2.cursor()
# 批量插入语句
sql = ‘insert into charge_record(uid,update_time) value(%s, %s)‘
# 导入全部数据
data2 = cursor1.fetchall()
cursor2.executemany(sql, data2)
# 提交到数据库
db2.commit()
# 关闭数据库连接
db1.close()
db2.close()
2.计算留存率
使用的MySQL语句如下:
USE test;
-- 计算首单时间
SELECT uid,min(update_time) u_time FROM charge_record GROUP BY uid;
-- 重采首付时间
SELECT a.uid,b.u_time,TIMESTAMPDIFF(MONTH,b.u_time,a.update_time) m_diff,CONCAT(YEAR(b.u_time),"年",MONTH(b.u_time),"月") y_m FROM charge_record a
LEFT JOIN (
SELECT uid,min(update_time) u_time FROM charge_record GROUP BY uid LIMIT 0,7000
) b on a.uid=b.uid WHERE b.u_time is NOT NULL;
-- 计算留存量
CREATE table cohort as
SELECT c.y_m "首付月份",c.m_diff"月份差",COUNT(DISTINCT c.uid) "留存量" FROM (
SELECT a.uid,b.u_time,TIMESTAMPDIFF(MONTH,b.u_time,a.update_time) m_diff,CONCAT(YEAR(b.u_time),"年",MONTH(b.u_time),"月") y_m FROM charge_record a
LEFT JOIN (
SELECT uid,min(update_time) u_time FROM charge_record GROUP BY uid
) b on a.uid=b.uid WHERE b.u_time is NOT NULL ) c GROUP BY c.y_m,c.m_diff;
-- 计算留存率
SELECT c.`首付月份`,CONCAT(ROUND((c.`留存量`/m.`留存量`)*100,2),"%") 留存率 FROM cohort c
LEFT JOIN (
SELECT 首付月份,留存量 FROM cohort WHERE `月份差`=0
) m on c.`首付月份`=m.`首付月份`;
-- 留存率进阶版
SELECT
n.`首付月份`,
AVG(n.`留存量`) "本月新增",
CONCAT(sum(n.`+1月`),"%") "+1月",
CONCAT(sum(n.`+2月`),"%") "+2月",
CONCAT(sum(n.`+3月`),"%") "+3月",
CONCAT(sum(n.`+4月`),"%") "+4月",
CONCAT(sum(n.`+5月`),"%") "+5月"
FROM (
# 一级子查询:转置表格,将月份差作为列名
SELECT
a.`首付月份`,
a.`留存量`,
CASE a.`月份差` when 1 THEN a.`留存率` ELSE 0 END "+1月",
CASE a.`月份差` when 2 THEN a.`留存率` ELSE 0 END "+2月",
CASE a.`月份差` when 3 THEN a.`留存率` ELSE 0 END "+3月",
CASE a.`月份差` when 4 THEN a.`留存率` ELSE 0 END "+4月",
CASE a.`月份差` when 5 THEN a.`留存率` ELSE 0 END "+5月"
FROM(
# 二级子查询:计算留存率
SELECT a.`首付月份`,b.`留存量`,a.`月份差`,ROUND((a.`留存量`/b.`留存量`)*100,2) 留存率
FROM cohort a
LEFT JOIN (
# 三级子查询:查询首月用户量
SELECT `首付月份`,`留存量`
FROM cohort
WHERE cohort.`月份差`=0
) b
on a.`首付月份`=b.`首付月份`
) a
) n
GROUP BY n.`首付月份`;
最终结果如下:
mysql留存率除了存储过程_基于MySQL分析线上充值留存率相关推荐
- mysql数据生产数据分析_基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程...
基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程 课程目录 (1)SQL与数Ju分析;目录中文件数:23个 (1) 开课-课时3SQL与数Ju库的价值.flv (2) ...
- mysql读写分离 存储过程_基于maxscale的读写分离部署笔记
使用maxscale搭建的读写分离架构,后期还可以再结合MHA做master的故障转移,这样业务层面上不需要做任何的改动即可. 基于connect方式的不要使用.从库延迟他还会继续分发请求过去,暂时不 ...
- mysql 数据日志分析_基于mysql数据库的日志分析系统
现如今,日志已经成为了我们分析系统及相关服务的一个重要工具.而日志也具有其相对较为固定的格式以便于进行统计查询.其大致格式如下: 日期时间 主机 进程[pi ...
- elasticsearch 数据类型_基于 MySQL Binlog 的 Elasticsearch 数据同步实践
来源;马蜂窝 一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存 ...
- mysql查询语句详解_基于mysql查询语句的使用详解
1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...
- keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践
MySQL在互联网应用中已经遍地开花,但是在银行系统中,还在生根发芽的阶段.本文记录的是根据某生产系统实际需求,对数据库高可用方案从需求.各高可用技术特点对比.实施.测试等过程进行整理,完善Mysql ...
- mysql数据库约束详解_基于MySQL数据库的数据约束实例及五种完整性约束介绍
为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效.相容. ...
- mysql 创建带参数的存储过程_在MySQL中创建带有IN和OUT参数的存储过程的方法
在 MySQL 中创建储存过程的语法很难记,除非你经常跟储存过程打交道,原因很简单,语法不是什么小笑话.如果你通过命令行控制 MySQL,你需要记住准确的语法.一个快速示例可以很好的帮助你做到这点.在 ...
- vsftp服务器mysql认证_基于mysql控制vsftp的用户认证机制
一.简介 vsftpd 是"very secure FTP daemon"的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以 ...
- mysql研究内容_基于MySQL数据库的数据管理的研究
[摘 要]MySQL 是一种开放源代码的关系型数据库管理系统,MySQL数据库系统使用最常用的数据库管理语言,即结构化查询语言进行数据库管理.缓存管理是对于文件数据在内存中的特殊管理,基于内存管理,向 ...
最新文章
- 1.8 centos7 的PATH、cp/mv/文档查看命令介绍
- iptables防火墙的基本配置
- 第一部分:基础知识(第一章)屏幕部分续
- 搭建WAMP 环境时,解决Windows下输入localhost找不到网页的问题
- 「软件项目管理」成本估算模型——Walston-Felix模型和COCOMO Ⅱ模型
- linux中断pollselcet按键处理机制
- php ci框架 模板引擎,详解CodeIgniter框架实现的整合Smarty引擎DEMO
- MySQL的安全设定
- series、dataframe转为tensor格式数据
- JVM调优日志解析分析
- 02 Apache Solr: 概览 Solr在信息系统架构中的位置
- Unity 宣布正式收购 Weta Digital
- L1-013 计算阶乘和 (10 分)—团体程序设计天梯赛
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)
- c# 模拟串口通信 SerialPort
- 使用Typora添加数学公式
- Windows——打印机错误(操作无法完成(错误 0x000006ba)。本地打印机后台处理程序服务没有运行。请重新启动打印机后台处理程序或重新启动计算机。)解决方案
- 鸿蒙系统手机如何投影,小屏如何换大屏 五种方法教你把手机画面投影到电视上...
- 如何学习人工智能,学习AI的一般路线
- Android 插件化开发——宿主APP加载APK插件