-- ?每个学校答过题的用户的平均答题数量
-- 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按学校排序。