1.首先 我有这么一个表
MariaDB [istester]> select * from istester;
+----+--------+------+-------+------------+---------+-------+
| id | uname | sex | birth | department | address | idoxu |
+----+--------+------+-------+------------+---------+-------+
| 1 | idoxu | 0 | NULL | NULL | NULL | 2020 |
| 2 | idoxu2 | 0 | NULL | NULL | NULL | 2020 |
| 11 | idoxu3 | 1 | NULL | NULL | NULL | NULL |
| 12 | idoxu4 | 2 | NULL | NULL | NULL | NULL |
| 13 | idoxu5 | 1 | NULL | NULL | NULL | NULL |
| 14 | idoxu6 | NULL | NULL | NULL | NULL | NULL |
+----+--------+------+-------+------------+---------+-------+
2.题目是:查询istester表,有几种性别类型(sax字段,去重)
SELECT COUNT(DISTINCT sex) FROM istester;
+---------------------+
| COUNT(DISTINCT sex) |
+---------------------+
| 3 |
+---------------------+
执行上面的SQL之后,NULL并没有统计进来,问了一下DBA,得知,一般在MySQL中,字段一定要设默认值,不能用默认NULL,这样在count,group的时候会有问题。
int类型可以默认为0, varchar可以默认为‘’
这就涉及程序中的经典问题:0、空值、和NULL是不是什么都没有的意思
字符默认为空可以表示为‘’,但是这个空字符是有值的,不是什么都没有,和数值类型为0的意思类似,而NULL则是真的什么都没有,所以统计计算的时候会忽略。
所以一般在建表的时候就有规范,不能默认null,一定要有值,0或者空字符