题解 | 统计每个学校的答过题的用户的平均答题数
统计每个学校的答过题的用户的平均答题数
https://www.nowcoder.com/practice/88aa923a9a674253b861a8fa56bac8e5
select university, round(sum(nums) / count(*), 4) avg_answer_cnt from ( select device_id, count(*) nums from question_practice_detail group by device_id ) num left join user_profile u on u.device_id = num.device_id group by university order by university asc;
我的解题思路:
首先要弄清楚avg_answer_cnt的计算方法:该学校中的答题总数/该学校的用户数
step1: 需要根据question表对device_id(用户)进行分组,计算每一个用户的答题数量 称之为nums表
step2: 由于查询的信息是基于question表的,而且question中的device_id没有user表中的device_id全面,也就是说存在用户没有参与答题,所以为了防止空值的出现,将user表左连接nums表,得到的是每一个答题用户(device_id)对应的学校和答题数量等信息。
step3:对连接后的大表进行操作,因为要计算每一个学校的平均答题数,所以要对university进行聚合,分别计算每一组中的记录数(也就是该学校的用户个数)和总答题数(也就是学校的答题数),相除即可。