题解 | 统计每个用户的平均刷题数

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分组语句后,对分组情况再进行筛选过滤。

全部评论

相关推荐

黑皮白袜臭脚体育生:春节刚过就开卷吗?哈基馆,你这家伙......
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务