select up.university ,round(count(qpd.question_id)/count(distinct qpd.device_id),4) as avg_answer_cnt
from user_profile up
inner join  question_practice_detail qpd
on up.device_id = qpd.device_id
group by up.university
order by up.university;

1、如何理解两个表相连后的新表

先理解1对多,1个大学对应多个学生,1个学生对应多次答题,新表会因为1个学生答了多道题目,会在user_profile表的基础上,新增n行,n为答题数。此时学生列的行数是和答题列的个数相同的。

2、以学校分组后,以浙江大学举例,浙江大学就对应了一个学生,这个学生答了三道题,此时折叠起来的学生列有三行数据,直接用count()统计的话,结果为3。与答题列个数相除就会等于1。因此需要对学生列去重,才可以得到正确答案。