题解 | #统计每个用户的平均刷题数#
统计每个用户的平均刷题数
http://www.nowcoder.com/practice/f4714f7529404679b7f8909c96299ac4
解题思路:
写一下这种题的本质 看似是查询三个表,其实是查询一个表,只需要把表通过key进行连接即可
题目分析:
山东大学的用户在不同难度下的平均答题题目数
限制条件:
- 山东大学(where university="山东大学")
- 不同难度(group by question_level)
联表操作
联表分为内联,外联和交叉联主要使用内联方式形式为:
inner join 表名 as 别名
on (+条件)表名1.key=表名2.key
计算平均答题题目数
要使用distinct关键字去掉相同的id(题目数量)/((distinct)device_id数量)
# 山东大学
# 不同难度
# 平均答题题目数(题目数量/用户数量)
# 表名 别名 key
# user_profile up device_id, answer_cnt
# question_practice_detail qpd device_id,question_id
# question_detail qd question_id question_level
select university,difficult_level,
COUNT(answer_cnt)/count(distinct qpd.device_id) as avg_answer_cnt
from question_practice_detail as qpd
#加入表user_profile
left join user_profile as up
on qpd.device_id=up.device_id
#加入表question_detail
left join question_detail as qd
on qpd.question_id=qd.question_id
where university="山东大学"
group by difficult_level