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

# Left Join注意要点:
# 1.在使用Left join时,写在前面的表为匹配时的底表,使用on给出匹配条件,匹配条件可以不唯一。
# 2.在表匹配时,一般我们会将要匹配的两段查询用括号括起来,并在括号末尾给予一串 字母,作为表的别名。
# (也可以不单独把子表中的字段选出来,直接对匹配的子表命名)
# 3.在使用on写匹配条件时,如果两个表中有字段名称一样,需要用(表名.字段)的写法指出该字段取自哪一个表,在最终Select语句输出时同理。


# 方法1
# select b.university,count(a.question_id)/count(distinct(a.device_id)) as avg_answer_cnt
# from 
# (select device_id,question_id
# from question_practice_detail)a --非必须把字段选出来再拼接
# left join 
# (select device_id,university
# from user_profile )b  --非必须把字段选出来再拼接
# on a.device_id=b.device_id
# group by b.university


# 方法2
select university,count(question_id)/count(distinct(a.device_id)) as avg_answer_cnt 
#每个学校用户的平均答题数目=该学校用户答题总次数count(question_id)	除以答过题的不同用户个数count(distinct(a.device_id))--答题明细表中的device_id要去重,才是单个人数
# university和question_id只分别存在于b、a表中,不必须用(表名.字段)写法
# 计算平均值是是在a表中做计算,而device_id存在于2张表中且名称一样,需要用(a.device_id)的写法指出该字段取自a表
from 
 question_practice_detail a  #不单独把子表中的字段选出来,直接对匹配的子表命名
left join 
 user_profile b  #不单独把子表中的字段选出来,直接对匹配的子表命名
on a.device_id=b.device_id
group by university
order by university


全部评论

相关推荐

05-07 20:52
吉林大学 Java
点赞 评论 收藏
分享
03-11 21:46
西北大学 Java
河和静子:这只是实习工资,我学长北大通班博一的,他同学被这家天天发邮件让他去实习,一个月10w
点赞 评论 收藏
分享
牛客583549203号:腾讯还好,况且实习而已,实习生流动性很大,属于正常现象,记得和HR委婉解释
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务