题解 | #统计每个学校的答过题的用户的平均答题数#
统计每个学校的答过题的用户的平均答题数
https://www.nowcoder.com/practice/88aa923a9a674253b861a8fa56bac8e5
# 请你写SQL查找每个学校用户的平均答题数目(说明:某学校用户平均答题数量计算方式为该学校用户答题总次数除以答过题的不同用户个数)根据示例,你的查询应返回以下结果(结果保留4位小数),注意:结果按照university升序排序!!! # COUNT(DISTINCT(q.device_id))就是取出答过题目的去除重复的用户数量 # COUNT(q.question_id)就是答过题目的总用户总数量, # COUNT(q.question_id)/COUNT(DISTINCT(q.device_id))就是答过题的用户的平均答题数 # 右连接正确 select university, round(count(question_id)/count(distinct a.device_id),4) as avg_answer_cnt from user_profile a right join question_practice_detail b on a.device_id =b.device_id group by university; # 有的用户是在学校页面,但是没有答题 也需要算人头 # 学校页面的device_id # 关于如何连接表 # 直接笛卡尔积连接是正确的 select university, round(count(question_id)/count(distinct a.device_id),4) as avg_answer_cnt from user_profile a , question_practice_detail b where a.device_id =b.device_id group by university; # 内连接正确 select university, round(count(question_id)/count(distinct a.device_id),4) as avg_answer_cnt from user_profile a join question_practice_detail b on a.device_id =b.device_id group by university; select university, round(count(question_id)/count(distinct a.device_id),4) as avg_answer_cnt from user_profile a inner join question_practice_detail b on a.device_id =b.device_id group by university; # 左连接不正确 select university, round(count(question_id)/count(distinct a.device_id),4) as avg_answer_cnt from user_profile a left join question_practice_detail b on a.device_id =b.device_id group by university; # 左边的表示用户信息表 左连接后 没有答过题的用户 也会出现question_id result # 只不过这两个是以null值出现 # 但是count计数,是包含null值 来计数 # 但是这样就会出现 没有答题的用户 也count上了一次‘虚假’答题 所以不能使用用户信息表left join 答题表
# COUNT(DISTINCT(q.device_id))就是取出答过题目的去除重复的用户数量
# COUNT(q.question_id)就是答过题目的总用户总数量,
# COUNT(q.question_id)/COUNT(DISTINCT(q.device_id))就是答过题的用户的平均答题数
# 左连接不正确
select university, round(count(question_id)/count(distinct a.device_id),4) as avg_answer_cnt
from user_profile a left join question_practice_detail b
on a.device_id =b.device_id
group by university;
# 左边的表示用户信息表 左连接后 没有答过题的用户 也会出现question_id result
# 只不过这两个是以null值出现
# 但是count计数,是包含null值 来计数
# 但是这样就会出现 没有答题的用户 也count上了一次‘虚假’答题 所以不能使用用户信息表left join 答题表
SQL错题 文章被收录于专栏
每天学习一遍 刷题刷题 越刷越强!