首页 > 试题广场 >

统计每个用户的平均刷题数

[编程题]统计每个用户的平均刷题数
  • 热度指数:269097 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
题目:运营想要查看参加了答题的山东大学的用户在不同难度下的平均答题题目数,请取出相应数据


用户信息表:user_profile
id device_id gender age university gpa active_days_within_30
question_cnt
answer_cnt
1 2138 male 21 北京大学 3.4 7 2 12
2 3214 male NULL 复旦大学 4 15 5 25
3 6543 female 20 北京大学 3.2 12 3 30
4 2315 female 23 浙江大学 3.6 5 1 2
5 5432 male 25 山东大学 3.8 20 15 70
6 2131 male 28 山东大学 3.3 15 7 13
7 4321 male 28 复旦大学 3.6 9 6 52

第一行表示:id为1的用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4,在过去的30天里面活跃了7天,发帖数量为2,回答数量为12
最后一行表示:id为7的用户的常用信息为使用的设备id为432,性别为男,年龄28岁,复旦大学,gpa为3.6,在过去的30天里面活跃了9天,发帖数量为6,回答数量为52

题库练习明细表:question_practice_detail
id device_id
question_id result
1 2138 111 wrong
2
3214 112 wrong
3 3214 113 wrong
4
6534
111 right
5 2315 115 right
6 2315 116 right
7 2315
117 wrong
8 5432 117 wrong
9 5432 112 wrong
10 2131 113 right
11
5432 113 wrong
12 2315 115 right
13 2315 116 right
14 2315
117 wrong
15 5432
117 wrong
16
5432 112 wrong
17
2131 113 right
18
5432 113 wrong
19 2315 117 wrong
20
5432 117 wrong
21 5432 112 wrong
22 2131 113 right
23
5432 113 wrong

第一行表示:id为1的用户的常用信息为使用的设备id为2138,在question_id为111的题目上,回答错误
......
最后一行表示:id为23的用户的常用信息为使用的设备id为5432,在question_id为113的题目上,回答错误

表:question_detail
id question_id difficult_level
1 111 hard
2 112 medium
3 113 easy
4 115 easy
5 116 medium
6 117 easy

第一行表示: 题目id为111的难度为hard
....
第一行表示: 题目id为117的难度为easy

请你写一个SQL查询,计算山东、不同难度的用户平均答题量,根据示例,你的查询应返回以下结果(结果在小数点位数保留4位,4位之后四舍五入):

university difficult_level avg_answer_cnt
山东大学 easy 4.5000
山东大学 medium 3.0000

山东大学有设备id为5432和2131这2个用户,这2个用户总共在question_practice_detail表下有12条答题记录,且答题题目是112,113,117,且数目分别为3,6,3,从question_detail可以知道题目难度分别为medium,easy,easy,所以,easy共有9个,故easy的题目平均答题量= 9(easy=9)/2 (device_id=3214 or device_id=5432) =4.5000,medium共有3个,medium的答题只有device_id=5432的用户,故medium的题目平均答题量= 3(medium=9)/1 ( device_id=5432) =3.0000
示例1

输入

drop table if exists `user_profile`;
drop table if  exists `question_practice_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
);
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');
INSERT INTO question_practice_detail VALUES(2,3214,112,'wrong');
INSERT INTO question_practice_detail VALUES(3,3214,113,'wrong');
INSERT INTO question_practice_detail VALUES(4,6543,111,'right');
INSERT INTO question_practice_detail VALUES(5,2315,115,'right');
INSERT INTO question_practice_detail VALUES(6,2315,116,'right');
INSERT INTO question_practice_detail VALUES(7,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(8,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(9,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(10,2131,113,'right');
INSERT INTO question_practice_detail VALUES(11,5432,113,'wrong');
INSERT INTO question_practice_detail VALUES(12,2315,115,'right');
INSERT INTO question_practice_detail VALUES(13,2315,116,'right');
INSERT INTO question_practice_detail VALUES(14,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(15,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(16,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(17,2131,113,'right');
INSERT INTO question_practice_detail VALUES(18,5432,113,'wrong');
INSERT INTO question_practice_detail VALUES(19,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(20,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(21,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(22,2131,113,'right');
INSERT INTO question_practice_detail VALUES(23,5432,113,'wrong');
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');

输出

山东大学|easy|4.5000
山东大学|medium|3.0000
头像 yub4by
发表于 2021-09-20 20:48:22
SELECT t1.university, t3.difficult_level, COUNT(t2.question_id) / COUNT(DISTINCT(t2.device_id)) as avg_answer_cnt from user_profile 展开全文
头像 webary
发表于 2021-09-03 18:02:01
题意明确: 仅查看山东大学的用户在不同难度下的每个用户的平均答题题目数 问题分解: 限定条件:山东大学的用户 up.university="山东大学"; 不同难度:按难度分组group by difficult_level 平均答题数:总答题数除以总人数count(qpd.q 展开全文
头像 牛客406250295号
发表于 2021-10-18 13:01:44
可以用左链接,以第二个表为基础,分别链接第一和第三个表 链接三个表后,以学校和难度分组 分组完成后用having 过滤 SELECT t1.university, t3.difficult_level, COUNT(t2.result) / COUNT(DISTINCT t2.device_i 展开全文
头像 DraonAbyss
发表于 2021-09-28 21:43:35
解题 类似SQL 入门 23,但是加限制为山东大学, 可在GROUP BY前加WHERE实现或在GROUP BY后加HAVING实现【同时GROUP BY需要增加university】 题解 题目:运营想要仅查看山东大学的用户在不同难度下的每个用户的平均答题题目数情况,请取出相应数据WHERE实现 展开全文
头像 牛客830891703号
发表于 2022-01-26 10:51:48
解题思路: 写一下这种题的本质 看似是查询三个表,其实是查询一个表,只需要把表通过key进行连接即可 题目分析: 山东大学的用户在不同难度下的平均答题题目数 限制条件: 山东大学(where university="山东大学") 不同难度(group by question_level) 联表操 展开全文
头像 奋斗牛牛
发表于 2021-09-01 19:05:31
主要思路 使用内连接,可以用where语句或者inner join 注意where语句要先筛选‘山东大学’ 注意 表格列名含义 如device_id指学生的ID,question_id是题目的ID注意要和题目里的answer_cnt的区别 SELECT u.university,qd.diffi 展开全文
头像 Geneningz
发表于 2022-03-19 19:34:24
SQL典型三段式代码 # 第一段:select段,选择字段及构造字段,其中构造字段常用 count sum round +-*/等函数及运算表达式 select university, difficult_level, round(count(qpd.question_id) 展开全文
头像 -旗鼓相当的对手-
发表于 2023-02-08 20:11:40
select u.university, t.difficult_level, count(d.question_id)/count(distinct d.device_id) from user_profile as u, question_practi 展开全文
头像 Joshua_q
发表于 2022-01-06 23:45:41
采用HAVING: SELECT up.university, qd.difficult_level, COUNT(qpd.question_id) / COUNT(DISTINCT(qpd.device_id)) AS avg_answer_cnt FROM questio 展开全文
头像 Pedro_json
发表于 2021-12-29 16:34:17
select university, difficult_level, round((count(qpd.result) / count(distinct qpd.device_id)), 4) avg_answer_cnt from question_practice_detail 展开全文

问题信息

难度:
725条回答 2325浏览

热门推荐

通过挑战的用户

查看代码