count函数具有三种形式:
- count(*)
- count(expression)
- count(distinct expression)
count(*)
该COUNT(*)函数返回SELECT语句返回的结果集中的行数。返回行数,COUNT(*)包括重复、非 NULL 和NULL行。
count(expression)
作为表达式的结果,COUNT(expression)返回不包含NULL值的行数。
COUNT(DISTINCT expression)
COUNT(DISTINCT expression)返回不包含NULL值的不同行数
重点说下这个
创建样例表:
CREATE TABLE `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`val` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4
插入样例数据:
INSERT INTO demo (val) VALUES(1),(1),(2),(2),(NULL),(3),(4),(NULL),(5);
插入后的数据如下:
+----+------+
| id | val |
+----+------+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | NULL |
| 6 | 3 |
| 7 | 4 |
| 8 | NULL |
| 9 | 5 |
+----+------+
查询语句:
select count(distinct id,if(is_null(val),null,true);
#执行结果为 7 , 两个包含null值的被忽略