1、where 与 HAVING 的区别
where是在查询结果出来之前,进行条件过滤,而HAVING是在查询结果出来之后,进行条件过滤。
最明显的区别就是:where后面加的字段名必须是要查询的实体表里存在的字段,而HAVING后面加的字段名是在查询结果之后的虚拟表中存在的字段。
例如:SELECT scoreid,cid AS cid_count FROM score HAVING cid_count>2
2、group by 后面跟字段名,作用就是将以此字段进行分组。
例如:SELECT sid,COUNT(*) AS cid_count FROM score GROUP BY sid
结果显示为每个sid对应的记录数。
3、where跟group by的嵌套使用:
例如:SELECT sid,COUNT(cid) AS cid_count FROM score WHERE score >90 GROUP BY sid
结果显示为每个sid对应的score大于90的记录数。
4、COUNT(*)为空时,如何显示为0:
COUNT(CASE WHEN score.`score`>90 THEN 1 ELSE NULL END )
即当查找score大于90的记录数为空时,就直接显示为0,不加这个条件,就不会显示。
例如:SELECT student.name, COUNT(CASE WHEN score.`score`>90 THEN 1 ELSE NULL END ) AS course_count FROM course,student,score WHERE student.sid=score.`sid` AND score.`cid` = course.`cid` GROUP BY score.sid;
结果显示为每个sid对应的score大于90的记录数,为空时显示为0.
参考资料
http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html