【技术研究】Mysql系列——having

    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后不是聚合函数返回的结果

你可能感兴趣的:(【技术研究】Mysql系列——having)