0、一个不错的数据分析博主(里面都是数据分析面试题)
数据分析星球的博客_优快云博客-笔记,机器学习领域博主数据分析星球擅长笔记,机器学习,等方面的知识https://blog.youkuaiyun.com/licent2011?type=blog
1、
2、
3、
3.1、根据条件查询连续登录N天的用户。
3.2、查询连续登录天数最大的用户及天数。
表结构及数据:
DROP TABLE IF EXISTS `test5`;
CREATE TABLE `test5` (
`dt` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`user_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of test5
-- ----------------------------
INSERT INTO `test5` VALUES ('2021-03-11', 'test_1', 23);
INSERT INTO `test5` VALUES ('2021-03-11', 'test_1', 23);
INSERT INTO `test5` VALUES ('2021-03-11', 'test_1', 23);
INSERT INTO `test5` VALUES ('2021-03-13', 'test_1', 23);
INSERT INTO `test5` VALUES ('2021-03-11', 'test_2', 19);
INSERT INTO `test5` VALUES ('2021-04-11', 'test_3', 39);
INSERT INTO `test5` VALUES ('2021-03-11', 'test_3', 39);
INSERT INTO `test5` VALUES ('2021-03-12', 'test_2', 19);
INSERT INTO `test5` VALUES ('2021-03-15', 'test_2', 19);
INSERT INTO `test5` VALUES ('2021-03-16', 'test_2', 19);
INSERT INTO `test5` VALUES ('2021-03-13', 'test_2', 19);
INSERT INTO `test5` VALUES ('2021-03-14', 'test_2', 19);
SET FOREIGN_KEY_CHECKS = 1;
------------------------------------------------ 下面是sql的实现语句
-- 方法1 用case when then 方法
select distinct user_id
from(
SELECT * ,
CASE
WHEN DATE_SUB(str_to_date(dt,'%Y-%m-%d'),INTERVAL 1 DAY) = str_to_date(@old,'%Y-%m-%d') and @u_id=user_id and @old:=dt
THEN @size:=@size+1
WHEN @old:=dt
THEN @size:=1
END
AS tt, @u_id:=user_id
FROM (select * from test5
group BY user_id,dt) t
ORDER BY user_id,dt) tb
where tb.tt = 2
-----------------------------------------------------------------
-- 求连续最多登录的天数
select MAX(tt)
from(
SELECT * ,
CASE
WHEN DATE_SUB(str_to_date(dt,'%Y-%m-%d'),INTERVAL 1 DAY) = str_to_date(@old,'%Y-%m-%d') and @u_id=user_id and @old:=dt
THEN @size:=@size+1
WHEN @old:=dt
THEN @size:=1
END
AS tt, @u_id:=user_id
FROM (select * from test5
group BY user_id,dt) t
ORDER BY user_id,dt) tb
------------------------------------------------------------------
-- 查询连续登录系统天数,最多的人和一共连续登录了多少天。
select user_id, tt
from(
SELECT * ,
CASE
WHEN DATE_SUB(str_to_date(dt,'%Y-%m-%d'),INTERVAL 1 DAY)