题解 | #统计每个学校各难度的用户平均刷题数#

统计每个学校各难度的用户平均刷题数

https://www.nowcoder.com/practice/5400df085a034f88b2e17941ab338ee8

题目答案:
select u.university, q2.difficult_level, 
count(q1.device_id)/count(distinct(q1.device_id)) as avg_answer_cnt
from user_profile u
inner join question_practice_detail q1
on u.device_id=q1.device_id
inner join question_detail q2
on q1.question_id=q2.question_id
group by u.university, q2.difficult_level
1.疑惑人的点可能就在平均刷题数了,答题的总数/答题的总人数,
在表question_practice_detail中,每个device_id对应一个人,device_id可能重复出现因为有的人会答了好几题,device_id的总数就是答题总数,不同的device_id就对应答题人数,分别为:
count(q1.device_id)
count(distinct(q1.device_id))
所以平均刷题数为
count(q1.device_id)/count(distinct(q1.device_id))
2.不使用left join,比如复旦大学的device_id为4321的用户没有答题,如果用left join会返回一行 “复旦大学 None None”,
可以使用right join,因为表question_detail中的question_id在表question_practice_detail中都出现过,question_practice_detail中的device_id在表user_profile中都出现过,
但是这类型的题目建议使用inner join,因为当表很大时,很难看清楚各表各列是否都出现过,使用inner join返回三个表都匹配的内容。
全部评论

相关推荐

在笔试的柠檬精很想去...:兄弟们,你们这个大厂,中厂,小厂怎么定义的 初来驾到,别笑话我,只要能学到本事,不管大厂小厂都可以,但是别进到黑厂就行
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务