-- ?每个学校答过题的用户的平均答题数量 -- 1.将用户表与答题明细表连接,条件是共有列device_id相同,将该查询作为一个临时表并命名为temp -- 2.将temp表作为子查询,按学校分组, -- 查询每个学校的答题人数(可能一个人写了好几道题,统计时需要使用DISTINCT),查询每个学校的总答题次数 -- 校平均答题数=校答题总次数/校答题人数,使用FORMAT()函数四舍五入保留4位小数 -- 3.按学校升序排序 SELECT temp.university, FORMAT ( COUNT(temp.question_id) / COUNT(DISTINCT temp.device_id), 4 ) avg_answer_cnt FROM ( SELECT user_profile.device_id, university, question_id FROM user_profile, question_practice_detail WHERE user_profile.device_id = question_practice_detail.device_id ) temp GROUP BY temp.university ORDER BY temp.university
题解思路:
1.将用户表与答题明细表连接,条件是共有列device_id相同,将该查询作为一个临时表并命名为temp,temp的结果如下图;
2.将该表作为子查询,按学校分组;
2.1使用COUNT(temp.question_id)
可以计算每个学校的做题总次数,如下图;
2.2使用COUNT(DISTINCT temp.device_id)
可以计算每个学校的做题的人数,如下图。
3.以上二者相除可得出每个学校做题人的平均做题次数,再使用FORMAT()
函数四舍五入保留4位小数;
4.最后使用ORDER BY
按学校排序。