ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1 统计复旦用户8月练题情况

2022-01-13 19:01:50  阅读:234  来源: 互联网

标签:INSERT 复旦 INTO practice question 用户 detail 练题 VALUES


目录

1 统计复旦用户8月练题情况

题目

现在运营想要了解复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况,请取出相应明细数据,对于在8月份没有练习过的用户,答题数结果返回0.
用户信息表user_profile
image
image
根据示例,你的查询应返回以下结果
image

示例1

输入:
drop table if exists `user_profile`;
drop table if  exists `question_practice_detail`;
drop table if  exists `question_detail`;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float,
`active_days_within_30` int ,
`question_cnt` int ,
`answer_cnt` int 
);
CREATE TABLE `question_practice_detail` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`question_id`int NOT NULL,
`result` varchar(32) NOT NULL,
`date` date NOT NULL
);
CREATE TABLE `question_detail` (
`id` int NOT NULL,
`question_id`int NOT NULL,
`difficult_level` varchar(32) NOT NULL
);

INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2,12,3,30);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6,5,1,2);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70);
INSERT INTO user_profile VALUES(6,2131,'male',28,'山东大学',3.3,15,7,13);
INSERT INTO user_profile VALUES(7,4321,'male',28,'复旦大学',3.6,9,6,52);
INSERT INTO question_practice_detail VALUES(1,2138,111,'wrong','2021-05-03');
INSERT INTO question_practice_detail VALUES(2,3214,112,'wrong','2021-05-09');
INSERT INTO question_practice_detail VALUES(3,3214,113,'wrong','2021-06-15');
INSERT INTO question_practice_detail VALUES(4,6543,111,'right','2021-08-13');
INSERT INTO question_practice_detail VALUES(5,2315,115,'right','2021-08-13');
INSERT INTO question_practice_detail VALUES(6,2315,116,'right','2021-08-14');
INSERT INTO question_practice_detail VALUES(7,2315,117,'wrong','2021-08-15');
INSERT INTO question_practice_detail VALUES(8,3214,112,'wrong','2021-05-09');
INSERT INTO question_practice_detail VALUES(9,3214,113,'wrong','2021-08-15');
INSERT INTO question_practice_detail VALUES(10,6543,111,'right','2021-08-13');
INSERT INTO question_practice_detail VALUES(11,2315,115,'right','2021-08-13');
INSERT INTO question_practice_detail VALUES(12,2315,116,'right','2021-08-14');
INSERT INTO question_practice_detail VALUES(13,2315,117,'wrong','2021-08-15');
INSERT INTO question_practice_detail VALUES(14,3214,112,'wrong','2021-08-16');
INSERT INTO question_practice_detail VALUES(15,3214,113,'wrong','2021-08-18');
INSERT INTO question_practice_detail VALUES(16,6543,111,'right','2021-08-13');
INSERT INTO question_detail VALUES(1,111,'hard');
INSERT INTO question_detail VALUES(2,112,'medium');
INSERT INTO question_detail VALUES(3,113,'easy');
INSERT INTO question_detail VALUES(4,115,'easy');
INSERT INTO question_detail VALUES(5,116,'medium');
INSERT INTO question_detail VALUES(6,117,'easy');
输出:
3214|复旦大学|3|0
4321|复旦大学|0|0

题解

先分析题目
1.复旦大学的每个用户-一个用户可能练习很多题,那么可能涉及到分组
2.8月份练习-需要根据data先筛选出8月份
3.练习的总题数-统计question_id
4.回答正确的题数-先筛选result为right的,再统计question_id

需要user_profile的device_id,universuty和question_practice_detail的device_id,question_id,result,data

1.先找出复旦大学的用户8月份答题情况

SELECT *
FROM user_profile up
LEFT JOIN question_practice_detail as qpd
ON qpd.device_id = up.device_id AND MONTH(qpd.date)=8
WHERE university ='复旦大学'

/*
2|3214|male|None|复旦大学|4.000|15|5|25|15|3214|113|wrong|2021-08-18
2|3214|male|None|复旦大学|4.000|15|5|25|14|3214|112|wrong|2021-08-16
2|3214|male|None|复旦大学|4.000|15|5|25|9|3214|113|wrong|2021-08-15
7|4321|male|28|复旦大学|3.600|9|6|52|None|None|None|None|None
*/

2.根据用户数分类,统计回答问题的总数

# count(qpd.question_id)不统计空值,默认为0
SELECT up.device_id,university,count(qpd.question_id),SUM(IF(qpd.result='right',1,0))
FROM user_profile up
LEFT JOIN question_practice_detail as qpd
ON qpd.device_id = up.device_id  AND MONTH(qpd.date)=8
WHERE up.university ='复旦大学'
GROUP BY up.device_id

标签:INSERT,复旦,INTO,practice,question,用户,detail,练题,VALUES
来源: https://www.cnblogs.com/rananie/p/15799257.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有