首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql函数范例-统计日存留率

2013-07-16 
mysql函数实例-统计日存留率根据项目报表需求,需要统计通过手机app登录系统的用户的日存留率。统计功能比较

mysql函数实例-统计日存留率

根据项目报表需求,需要统计通过手机app登录系统的用户的日存留率。统计功能比较简单,仅作日后参考,欢迎经验丰富的朋友指点。

?

1.数据库表

手机用户的信息保存在一张visitor_user的表中,其中包含了用户使用手机app软件时,可以获取的数据,包括: 商家id、手机设备号、下线时间等信息。

?

2.功能分析与设计

数据统计报表一般都采用DB的存储过程或函数进行统计,并将数据保存到数据库表中,提供前台应用查询和展示。对于实时性的报表需求,建议在非业务库上进行统计。一般主库对外提供业务服务,通过复制等机制将业务数据存储到专门的数据库,或者专门的物理节点上,这样就有效的避免了报表统计功能对正常业务的影响。

?

3.实现

1.首先,从用户日统计表中将前天的登录用户统计到存留明细表中。

2.然后,从用户日统计表中将昨天的登录用户统计出来,并将前天、昨天都登录的用户的存留状态设置为1。

3.然后,从存留明细表中统计昨天用户的存留数、存留率,并保存到存留表中。

?

执行统计采用了mysql的事件机制,定时触发调用统计函数,进行数据统计。

每天凌晨4点钟,开始统计昨天的日存留率。

?

event:


mysql函数范例-统计日存留率
?

表结构:

1.report_user_login_day_detail? (日登陆用户流水表)

?

??3. report_user_remain_day (日存留用户统计表) 

?

CREATE FUNCTION `insert_user_remain_day`(`_day_time` date) RETURNS tinyint(1)BEGIN#Routine body goes here...DECLARE stopFlag INT DEFAULT 0 ;DECLARE _status_remain TINYINT(1);DECLARE _remain_count INT DEFAULT 0;DECLARE _all_count INT DEFAULT 0;DECLARE _temp_count INT DEFAULT 0;DECLARE cur2 CURSOR FOR SELECT status_remain, count(device) FROM report_user_remain_day_detail WHERE status_remain = 1 and day_time = _day_time GROUP BY status_remain; DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopFlag=1;OPEN cur2;FETCH cur2 INTO _status_remain, _remain_count; WHILE  stopFlag = 0 doIF _status_remain = 1 THENSET _temp_count = _remain_count;SET _all_count = _all_count + _remain_count;ELSE SET _all_count = _all_count + _remain_count;END IF;INSERT INTO report_user_remain_day(id, day_time, remain_count, remain_percent_day, type_client) VALUES(UUID(), _day_time, _temp_count, (_temp_count / _all_count), 0);FETCH cur2 INTO _status_remain, _remain_count; END WHILE;CLOSE cur2;RETURN 1;END

?

热点排行