题解 | #统计每个学校的答过题的用户的平均答题数#
统计每个学校的答过题的用户的平均答题数
https://www.nowcoder.com/practice/88aa923a9a674253b861a8fa56bac8e5
select university,count(question_id)/count(distinct b.device_id) as avg_answer_cnt from (select device_id,university,active_days_within_30 from user_profile) a left join question_practice_detail b on a.device_id=b.device_id group by university having avg_answer_cnt is not NULL
首先连接,连接时本着有用的才连接,所以先从user表中select一部分列做连接,连接后按学校分组,此时的结果表中会有两列device_id,分别代表学校学生设备id和参与答题的学生设备id,所以在计算平均答题率时分母为参与答题学生设备id即b.device_id,由于这列数据有重复值(一个学生可以答多道题目),故要distinct去重,最后的having语句是为了避免一个学校没有学生答题时答题率为None的情形(此时时不必要展示的)
感觉这种方法有点繁琐了,有更简单的可以讨论下。