现有题目练习表question_practice_detail(device_id 设备号, question_id 题目ID, result 答题结果, event_date 日期),示例数据如下: 请统计截至当月的每人练题总数和最近三个练题月的月平均练题数,以及截至当月所有人的练题总数,平均练题数保留2位小数,结果按设备号、年月份升序排序。示例数据输出如下: 解释:最早有练题记录的是2021年5月,该月3211练了1题,截至当月所有人总练题数为2; 该月3214也练了1题;202106月3214练了2题,截至该月他共练了3题,近三月的月平均练题数为(1+2)2=1.50,所有人共练题数为1+3=4; 202107月3214练了3题,截至该月他共练了6题,近三月的月平均练题数为(1+2+3)3=2.00,所有人共练题数为1+6=7; 3214的下一个练题月(有练题记录的月份)为202109,该月他练了4题,截至该月他共练了10题,近三月的月平均练题数为(2+3+4)3=3.00,所有人共练题数为1+10=11。
示例1

输入

drop table if exists `question_practice_detail`;
CREATE TABLE `question_practice_detail` (
	`id` int PRIMARY KEY AUTO_INCREMENT,
	`device_id` int NOT NULL,
	`question_id`int NOT NULL,
	`result` varchar(32) NOT NULL,
	`event_date` date
);

INSERT INTO question_practice_detail(device_id,question_id,result,event_date) VALUES
	(3211,112,'right','2021-05-09'),
	(3214,112,'right','2021-05-24'),
	(3214,112,'wrong','2021-06-24'),
	(3214,111,'wrong','2021-06-24'),
	(3214,113,'right','2021-07-25'),
	(3214,113,'right','2021-07-20'),
	(3214,112,'wrong','2021-07-31'),
	(3214,112,'right','2021-09-09'),
	(3214,113,'wrong','2021-09-15'),
	(3214,114,'right','2021-09-21'),
	(3214,112,'right','2021-09-28');

输出

device_id|ym|sum_cnt|avg3_cnt|total_cnt
3211|2021-05|1|1.00|2
3214|2021-05|1|1.00|2
3214|2021-06|3|1.50|4
3214|2021-07|6|2.00|7
3214|2021-09|10|3.00|11
加载中...