mysql sum 函数、count 函数,以及 NULL 值条件可能踩的坑。
- SELECT SUM(score) FROM `person` ;? ? null
- SELECT COUNT(score) FROM `person`;? ? 0
- select id from person where score=NULL;? ? null
显然,这三条 SQL 语句的执行结果和我们的期望不同:
- 虽然score 是null,但 sum 的结果应该是 0 才对;
- 虽然 score 是 null,但记录总数应该是 1 才对;
- 使用 score =null 并没有查询到 id=1 的记录,查询条件失效。
原因是:
- MySQL 中 sum 函数没统计到任何记录时,会返回 null 而不是 0,可以使用 IFNULL 函数把 null 转换为 0;
- MySQL 中 count 字段不统计 null 值,count(*) 才是统计所有记录数量的正确方式。
- MySQL 中使用诸如 =、<、> 这样的算数比较操作符比较 NULL 的结果总是 NULL,这种比较就显得没有任何意义,需要使用 IS NULL、IS NOT NULL 或 ISNULL() 函数来比较。
修改一下 SQL:
select ifnull(sum(score) ,0) from `person` ;? ?
select count(*) from `person` ;? ?
select * from `person` where score is null;?
?