您的位置:首页 > 文旅 > 美景 > 牛客网SQL进阶144:每月及截止当月的答题情况

牛客网SQL进阶144:每月及截止当月的答题情况

2024/10/6 14:26:54 来源:https://blog.csdn.net/SHWAITME/article/details/141300966  浏览:    关键词:牛客网SQL进阶144:每月及截止当月的答题情况

每月及截止当月的答题情况_牛客题霸_牛客网

0 问题描述

  基于 试卷作答记录表exam_record 计算 月活用户数、新增用户数、截止当月的单月最大新增用户数、截止当月的累积用户数。

1 数据准备

drop table if exists exam_record;
CREATE TABLE exam_record (id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',uid int NOT NULL COMMENT '用户ID',exam_id int NOT NULL COMMENT '试卷ID',start_time datetime NOT NULL COMMENT '开始时间',submit_time datetime COMMENT '提交时间',score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;INSERT INTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2020-01-01 09:01:01', '2020-01-01 09:21:59', 90),
(1002, 9001, '2020-01-20 10:01:01', '2020-01-20 10:10:01', 89),
(1002, 9001, '2020-02-01 12:11:01', '2020-02-01 12:31:01', 83),
(1003, 9001, '2020-03-01 19:01:01', '2020-03-01 19:30:01', 75),
(1004, 9001, '2020-03-01 12:01:01', '2020-03-01 12:11:01', 60),
(1003, 9001, '2020-03-01 12:01:01', '2020-03-01 12:41:01', 90),
(1002, 9001, '2020-05-02 19:01:01', '2020-05-02 19:32:00', 90),
(1001, 9002, '2020-01-02 19:01:01', '2020-01-02 19:59:01', 69),
(1004, 9002, '2020-02-02 12:01:01', '2020-02-02 12:20:01', 99),
(1003, 9002, '2020-02-02 12:01:01', '2020-02-02 12:31:01', 68),
(1001, 9002, '2020-02-02 12:01:01', '2020-02-02 12:43:01', 81),
(1001, 9002, '2020-03-02 12:11:01', null, null);

2 数据分析

select start_month ,--月活用户数  count(distinct uid) mau,  -- 新增用户sum(new_user) month_uv, -- 截止当月的最大新增用户数max(sum(new_user))over(order by start_month) max_month_uv, sum(sum(new_user))over(order by start_month) cum_sum_uv
from (select *,date_format(start_time,'%Y%m') start_month,-- 若用户的登录时间等于首次登录时间则定义为新用户,新用户被标记为1,其他标记为0。if(start_time = min(start_time)over(partition by uid),1,0) new_userfrom exam_record)t1
group by start_month;

思路分析:

  • step1: 定义新用户
IF(start_time = new_user_day,1,0) AS new_day # 若用户的登录时间等于首次登录时间则定义为新用户,新用户被标记为1,其他标记为0。
IF(start_time=MIN(start_time)OVER(PARTITION BY uid),1,0) AS new_day #完整的表达
  • step2:统计月活用户: 月活用户需要去重 count(distict uid) mau
  • step3:统计月新增用户​​​​​​​:对每天的新增用户进行求和sum(new_day) month_add_uv

3 小结

(1)新增用户的定义——首次登录的用户,也就是把用户最早登录的那天定义为首次登录日期。

(2)截止当月的单月最大新增用户数:按照月份依次对比每个月的新增用户数的大小取大值用max()over(order by start_month)

(3)截止当月的累积用户数:按照月份依次累加新增用户数用sum()over(order by start_month)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com