题解 | 统计每个学校的答过题的用户的平均答题数
统计每个学校的答过题的用户的平均答题数
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函数得出数量。
同一个解题思路的题目
以上end。