search
HomeDatabaseMysql Tutorialmysql函数实例-统计日存留率_MySQL
mysql函数实例-统计日存留率_MySQLJun 01, 2016 pm 01:32 PM
mysqlcell phoneDatabase Tablestatisticssoftware

bitsCN.com

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

 

1.数据库表

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

 

2.功能分析与设计

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

 

3.实现

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

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

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

 

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

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

 

event:

图片上传错误,待恢复后上传。

 

Sql代码  BEGIN      #Routine body goes here...      DECLARE _yesterday DATE DEFAULT NULL;      DECLARE _before_yesterday DATE DEFAULT NULL;      DECLARE _is_success tinyint(1) DEFAULT 0;            select DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-%d'),INTERVAL 1 day) INTO _yesterday;      select DATE_SUB(DATE_FORMAT(NOW(), '%Y-%m-%d'),INTERVAL 2 day) INTO _before_yesterday;            #统计前天用户数,并将前天用户插入到report_user_remain_day_detail表中      SET _is_success = get_user_remain_day(_before_yesterday);        #查询report_user_login_day_detail,统计昨天的用户,并将前天和昨天都登录的用户状态设置为1      SET _is_success = update_user_status_remain(_yesterday);        #统计存留用户明细表,将统计数据存储到统计表report_user_remain_day      SET _is_success = insert_user_remain_day(_yesterday);            RETURN _is_success;  END  Sql代码  CREATE FUNCTION `get_user_remain_day`(`_day_time` date) RETURNS int(1)  BEGIN      #Routine body goes here...       DECLARE stopFlag INT DEFAULT 0 ;      DECLARE _device VARCHAR(50) DEFAULT NULL;      DECLARE _a_token CHAR(64) DEFAULT '-1';      DECLARE _day_time date;      DECLARE _shop_id INT(11) DEFAULT 0;        #查询当天的登录用户      DECLARE cur1 CURSOR FOR  select shop_id, device, a_token from report_user_login_day_detail WHERE day_time = _day_time;      DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopFlag=1;        OPEN cur1;            FETCH cur1 INTO _shop_id, _device, _a_token;      WHILE  stopFlag = 0 do          INSERT INTO report_user_remain_day_detail(id, shop_id, day_time, device, a_token)               values (UUID(), _shop_id, _day_time, _device, _a_token);            FETCH cur1 INTO _shop_id, _device, _a_token;      END WHILE;      CLOSE cur1;        RETURN 1;  END    Sql代码  CREATE FUNCTION `update_user_status_remain`(`_day_time` date) RETURNS tinyint(1)  BEGIN      #Routine body goes here...        DECLARE stopFlag INT DEFAULT 0 ;      DECLARE _device VARCHAR(50) DEFAULT NULL;      DECLARE _a_token CHAR(64) DEFAULT '-1';              #查询昨天的登录用户      DECLARE cur1 CURSOR FOR  select device, a_token from report_user_login_day_detail           WHERE day_time = _day_time;      DECLARE CONTINUE HANDLER FOR NOT FOUND SET stopFlag=1;        OPEN cur1;            FETCH cur1 INTO _device, _a_token;      WHILE  stopFlag = 0 do           UPDATE report_user_remain_day_detail SET status_remain = 1, day_time = _day_time               WHERE device = _device;            FETCH cur1 INTO _device, _a_token;      END WHILE;      CLOSE cur1;           RETURN 1;  END  Sql代码  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 do                        IF _status_remain = 1 THEN              SET _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  

 


bitsCN.com
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql需要commit吗mysql需要commit吗Apr 27, 2022 pm 07:04 PM

在mysql中,是否需要commit取决于存储引擎:1、若是不支持事务的存储引擎,如myisam,则不需要使用commit;2、若是支持事务的存储引擎,如innodb,则需要知道事务是否自动提交,因此需要使用commit。

mysql-connector是什么mysql-connector是什么May 12, 2022 pm 04:04 PM

“mysql-connector”是mysql官方提供的驱动器,可以用于连接使用mysql;可利用“pip install mysql-connector”命令进行安装,利用“import mysql.connector”测试是否安装成功。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment