MySQL中COUNT()的正确食用方法

在学习MySQL的过程中,遇到的一个小问题,感觉挺有意思。

现在我们有一张表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE test (
`value` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf-8;
INSERT INTO test (value) VALUES(1);
INSERT INTO test (value) VALUES(4);
INSERT INTO test (value) VALUES(5);
INSERT INTO test (value) VALUES(6);
INSERT INTO test (value) VALUES(4);
INSERT INTO test (value) VALUES(4);
INSERT INTO test (value) VALUES(5);
INSERT INTO test (value) VALUES(2);
INSERT INTO test (value) VALUES(8);
INSERT INTO test (value) VALUES(1);

我们需要查出value为4的个数
↓错误方式:结果为10

1
2
SELECT COUNT(value=4)
FROM test

↓正确方式:结果为3

1
2
SELECT COUNT(value=4 OR NULL)
FROM test

逻辑上有些奇怪,为什么要加这个OR NULL呢?

我们看一下COUNT()方法括号中的表达式对应的值:
|表达式| 4=4 | 3=4 | 1 OR NULL | 0 OR NULL |
|:—|:—|:—|:—|:—|
|值| 1 | 0 | 0 | NULL |

原来,只要值不为NULL(相等为1,不等为0,他们都不为NULL),COUNT()就会计数。

所以,加的这个OR NULL,有点三元运算符的意味呢。