现在各种app盛行,与此同时,运营app也变得非常重要,关注app用户的留存情况是运营中的重要的一项,那么如何计算app的用户留存率呢?在该功能实现过程中,我使用了mysql的存储过程,每天定时任务执行调用存储过程,以计算每天用户的留存情况:
1、要计算用户的留存率,首先要准备好基础数据表
基础数据表,就是记录每一天用户的使用app的情况,只要用户在某一天使用了app,那么该用户就是这一天的留存用户,eg:2016-02-13 用户A注册使用app,2016-02-14用户又登录使用了app,那么用户A就是2-14的留存用户,基础数据表就是记录用户A在2-14使用了app,就记录一条数据,这里需要注意的是,用户A在2-14多次登录使用app,在基础表中,我们只记录一次,便于计算和查询。
我设计的基础表结构
CREATE TABLE `stat_remain_log_login` (
`userId` varchar(32) DEFAULT NULL COMMENT '用户ID',
`last_login_time` datetime DEFAULT NULL COMMENT '最后一次登录时间',
`register_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '用户注册时间',
`fromOsType` varchar(100) DEFAULT NULL COMMENT '手机操作系统'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
实际上这张基础表,是通过查询app的操作日志表所得,最后一次登录时间可以理解为用户在一天中最早一次登录的时间,这样便于计算,因为一个用户一天的登录数据我们只记录一次,这样我们得到了基础数据表;
2、设计记录留存率的数据库表
CREATE TABLE `stat_remain` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`dru` int(11) NOT NULL COMMENT '每日新增注册用户',
`fristDayRate` double(5,2) DEFAULT NULL COMMENT '1天后留存率',
`secondDayRate` double(5,2) DEFAULT NULL COMMENT '2天后留存率',
`thirdDayRate` double(5,2) DEFAULT NULL COMMENT '3天后留存率',
`forthDayRate` double(5,2) DEFAULT NULL COMMENT '4天后留存率',
`fifthDayRate` double(5,2) DEFAULT NULL COMMENT '5天后留存率',
`sixthDayRate` double(5,2) DEFAULT NULL COMMENT '6天后留存率',
`seventhDayRate` double(5,2) DEFAULT NULL COMMENT '7天后留存率',
`fourteenthDayRate` double(5,2) DEFAULT NULL COMMENT '14天后留存率',
`thirtiethDayRate` double(5,2) DEFAULT NULL COMMENT '30天后留存率',
`stat_time` timestamp NOT NULL DEFAULT '2014-01-01 00:00:00',
`add_time` timestamp NOT NULL DEFAULT '2014-01-01 00:00:00',
`fromOsType` varchar(100) DEFAULT NULL COMMENT '手机操作系统',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
3、处理计算的留存率的存储过程
DELIMITER $$
USE `entplus`$$
DROP PROCEDURE IF EXISTS `stat_remain_user`$$
CREATE DEFINER=`root`@`%` PROCEDURE `stat_remain_user`(IN startDate DATE)
BEGIN
DECLARE i INT;
SET i