数据分析师Mysql复习模拟自考

本文是一位数据分析师通过创建MySQL表格并填充数据,进行自我考核的实践。涉及用户登录记录的统计,如用户总数、指定日期登录记录、最早和最晚登录用户等查询,以及登录次数超过一次的用户筛选。这些练习旨在检验和提升MySQL操作技能。
摘要由CSDN通过智能技术生成

数据分析师Mysql模拟自考


一、数据准备背景:

最近一直在学mysql,为了检测所学的掌握程度,特有此mysql自考一文;

二、数据准备建表语句:

场景:每个用户在登陆某个系统的时候,会有登陆的ip记录,登陆的当前时间记录等等,以及最重要的用户的uid,即用户的唯一标识;

CREATE TABLE `user_login_time` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(255) DEFAULT NULL COMMENT '用户id',
  `curr_day` date DEFAULT NULL COMMENT '当天时间,yyyyMMdd',
  `login_ip` varchar(32) DEFAULT '0' COMMENT '登录的ip',
  `login_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '登录时间',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_uid` (`uid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=51505 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

三、造数准备SQL脚本

大约造数5万多条,用来进行模拟真实环境数据

DROP PROCEDURE IF EXISTS user_login_time;--如果存在此存储过程则删掉
DELIMITER $
CREATE PROCEDURE user_login_time()
BEGIN
    DECLARE i INT DEFAULT 1;
		
    WHILE i<=51000 DO
        INSERT INTO `user_login_time`(`uid`, `curr_day`, `login_ip`, `login_date`) VALUES (FLOOR(RAND()*50000 + 500), NOW(), "127.0.0.1", NOW());
        SET i = i+1;
    END WHILE;
END $
CALL user_login_time();

四、自考题目汇总以及参考答案:

-- 统计用户
select count(*) from user_login_time;

-- 统计这张表,一共有多少个用户登录过
答案:select count(DISTINCT uid) from user_login_time ;

-- 统计指定某天的用户总的登录记录:
select count(curr_day) from user_login_time where curr_day="2020-11-07";
select * from user_login_time where curr_day!="2020-11-07";

-- 找出2020-11-07这一天中最先登录的用户
select uid ,login_date from user_login_time where curr_day="2020-11-07" order by login_date asc limit 1;

-- 找出2020-11-07这一天中最后登录的用户
select uid ,login_date from user_login_time where curr_day="2020-11-07" order by login_date desc limit 1;

-- 找出2020-11-07这一天中前十个登录的用户
select uid ,login_date from user_login_time where curr_day="2020-11-07" order by login_date limit 10; -- 错误没有考虑重复uid的情况;
select distinct uid,login_date from user_login_time where curr_day="2020-11-07" order by login_date limit 0,10;

-- 找出2020-11-07这一天中最后十个登录的用户
select distinct uid ,login_date from user_login_time where curr_day="2020-11-07" order by login_date desc limit 10;-- 错误
select distinct uid ,login_date from user_login_time where curr_day="2020-11-07" and uid is not null order by login_date desc limit 10;-- 正确:
select distinct uid ,login_date from user_login_time where curr_day="2020-11-07" and uid is not null and uid!=''  order by login_date desc limit 10;-- 增强版,去掉空字符串情况

-- 需要找出整个表中,登录次数大于一次的所有用户;2, 3, ,4次都有可能:考察group by 
select uid,curr_day from user_login_time group by curr_day having count(curr_day)>1; -- 错误
select uid,curr_day from user_login_time group by uid having count(curr_day)>1; -- 凑巧
select uid,curr_day from user_login_time group by uid having count(uid)>1; -- 正确

五、结尾:

由于本人初次写作,若在本文中发现问题,谢谢指出,不胜感激!!!​

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值