select university,difficult_level,count(b.question_id)/count(distinct(b.device_id))
from
user_profile a
left join
question_practice_detail b
on a.device_id=b.device_id
left join
question_detail c
on b.question_id=c.question_id
where university="山东大学"
group by university,difficult_level
# having university="山东大学"--方法2
# --------------------------------------------------------------
# 【聚合函数结果作为筛选条件时,不能用where过滤,而是用having语法】
# 原因分析:
# 编写语句顺序的思路:严格遵循SQL语句执行顺序
# SQL语句执行顺序:FROM-ON-JOIN-WHERE-GROUP BY-WITH-HAVING-SELECT-DISTINCT-ORDER BY-LIMIT
# 在SQL语句执行顺序中先执行where语句后执行GROUP BY语句,即聚合函数的结果作为筛选条件时,where语句已经先执行完了,所以没办法再对聚合函数下的分组GROUP BY语句进行过滤,应该用 SQL语句执行顺序中排在靠后位置的HAVING语句进行过滤,此时会在执行GROUP BY分组语句后,对分组情况再进行筛选过滤。