例如,大家有一个students表,其中有3个学生的成绩如下: +----+-------+ | id | score | +----+-------+ | 1 | 85 | | 2 | 90 | | 3 | NULL | +----+-------+ 如果大家想统计成绩为80分以上的学生人数,可以使用下列的SQL语句: SELECT COUNT(*) FROM students WHERE score >= 80; 这个查询的结果是2,表示两个学生成绩大于等于80分。但是如果大家想统计成绩在70分到80分之间的学生人数,可以使用下列的SQL语句: SELECT COUNT(*) FROM students WHERE score >= 70 AND score< 80; 这个查询的结果却是0,而不是大家期望的1。这是为什么呢?
这是因为count函数并不会统计NULL值,而大家的第三个学生的成绩是NULL。这导致该行无法被统计在内,结果就变成了0。
解决这个问题的方法有多种,一种简单的方法是使用count函数的另一种形式:count(*)或count(1)。这种形式不关心行中的任何特定列,只要行存在,就会将其计算在内。代码如下:
SELECT COUNT(*) FROM students WHERE score >= 70 AND score= 70 AND score< 80;
这两种SQL语句都会得到正确的结果,即1。大家可以根据自己的需要选择使用哪种形式。