题解 | 统计每个学校的答过题的用户的平均答题数

统计每个学校的答过题的用户的平均答题数

https://www.nowcoder.com/practice/88aa923a9a674253b861a8fa56bac8e5?tpId=199&tqId=1975674&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D2%26subTabName%3Donline_coding_page

SELECT 
    user_profile.university,
    ROUND( COUNT( question_practice_detail.device_id) /COUNT(DISTINCT question_practice_detail.device_id), 4) AS avg_answer_cnt /*device_id数量/device_id类型*/
FROM 
    user_profile 
INNER JOIN 
    question_practice_detail 
ON 
    user_profile.device_id = question_practice_detail.device_id
GROUP BY
    university;

题目已知

查找每个学校用户的平均答题数目(说明:某学校用户平均答题数量计算方式为该学校 用户答题总次数/答过题的不同用户个数)

解题思路

SQL会先执行GROUP BY ,可以理解为两表合并后,并按照university划分为以单个学校为单位的小表格,这一步实现题目已知中的第一次分类——将表中数据按照学校分为一个个小的组,那么第一张表(user_profile)的作用就结束了。

现在可以不用再去思考学校分类的问题,而是考虑求出平均答题数量,平均答题数量=总答题次数 /总答题人数

在分好的学校后,答题次数,即为device_id 出现了几次,故可以直接用 COUNT 函数求出,

而总答题人数,用户id(device_id 且题目已知 每个用户有唯一的一个终端)有几个,就有几个答题人数,所以使用DISTINCT,剔除device_id 中重复出现的字段,并结合COUNT函数得出数量。

同一个解题思路的题目

https://www.nowcoder.com/practice/5400df085a034f88b2e17941ab338ee8?tpId=199&tqId=1975675&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3DSQL%25E7%25AF%2587%26topicId%3D298

以上end。

全部评论

相关推荐

渴望wlb的牛油果很...:直说卡第一学历不就行了 非得拐弯抹角
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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