# 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