描述
题目:运营想要了解每个学校答过题的用户平均答题数量情况,请你取出数据。
示例:用户信息表 user_profile,其中device_id指终端编号(认为每个用户有唯一的一个终端),gender指性别,age指年龄,university指用户所在的学校,gpa是该用户平均学分绩点,active_days_within_30是30天内的活跃天数。
第一行表示:用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4,在过去的30天里面活跃了7天
最后一行表示:用户的常用信息为使用的设备id为4321,性别为男,年龄28岁,复旦大学,gpa为3.6,在过去的30天里面活跃了9天
示例:答题情况明细表 question_practice_detail,其中question_id是题目编号,result是答题结果。
第一行表示用户的常用信息为使用的设备id为2138,在question_id为111的题目上,回答错误
....
最后一行表示用户的常用信息为使用的设备id为5432,在question_id为113的题目上,回答错误
请你写SQL查找每个学校用户的平均答题数目(说明:某学校用户平均答题数量计算方式为该学校用户答题总次数除以答过题的不同用户个数)根据示例,你的查询应返回以下结果(结果保留4位小数),结果按照university升序排序:
解答一:
问题分解:
- 限定条件:无;
- 每个学校:按学校分组,
group by university
- 平均答题数量:在每个学校的分组内,用总答题数量除以总人数即可得到平均答题数量
count(question_id) / count(distinct device_id)
。 - 表连接:学校和答题信息在不同的表,需要做连接
select university,
count(question_id) / count(distinct qpd.device_id) as avg_answer_cnt
from question_practice_detail as qpd
inner join user_profile as up
on qpd.device_id=up.device_id
group by university
解答二:
select university,avg(answer_cnt)
from ((select device_id,count(question_id) as answer_cnt
from question_practice_detail
group by device_id)
as a left join user_profile
on a.device_id = user_profile.device_id)
group by university
order by university