题解 | 统计每个学校的答过题的用户的平均答题数

统计每个学校的答过题的用户的平均答题数

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进行聚合,分别计算每一组中的记录数(也就是该学校的用户个数)和总答题数(也就是学校的答题数),相除即可。

全部评论

相关推荐

06-04 17:59
已编辑
长江大学 Java
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务