mysql中having的作用是对分组之后的结果进行筛选。
在group的基础上,见http://www.jianshu.com/p/38f1992fb0ea?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin&from=singlemessage&isappinstalled=1
进一步需要帅选,比如,学校有多门课程,想查看学分大于3的课程中,被大于等于10个学生选中的课程是哪些,以及对应的人数:
SELECT COUNT(*) num_tmp, course_id FROM `course` WHERE course_score>"3" GROUP BY course_id having num_tmp>=10 ORDER BY course_id;
即:先从course表中查询学分大于3的所有课程,然后按照课程分组,并计算每门课程选择的人数,最后将人数大于等于10的课程和对应的人数返回。
有人可能疑惑?where和having的区别?
where是在聚合前使用,having在聚合后筛选~ 另外:having后面跟的条件判断的字段必须是聚合函数返回的结果,否则sql会报错,例如:
SELECT COUNT(*) num_tmp, course_id FROM `course` GROUP BY course_id having course_score>"3" ORDER BY course_id;
将会报错:
图1-having后不是聚合函数返回的结果
网友评论