NULL值处理问题
如果在含有null值的列上直接进行聚合运算,由于存在null值会导致最后的结果不正确
请看下面的 "books_stock" 表:
+---------+--------------------------+----------------+---------------+------+
| book_id | bookname | shanghai_store | beijing_store | unit |
+---------+--------------------------+----------------+---------------+------+
| 1 | C++从入门到精通 | 10 | NULL | 45 |
| 2 | Python从入门到精通 | 25 | 15 | 35 |
| 3 | Java从入门到精通 | 50 | NULL | 25 |
+---------+--------------------------+----------------+---------------+------+
现在要统计每本书总的库存成本
我们使用下面的 SELECT 语句:
select bookname, unit*(shanghai_store+beijing_store) as total
from books_stock;
输出结果
+--------------------------+-------+
| bookname | total |
+--------------------------+-------+
| C++从入门到精通 | NULL |
| Python从入门到精通 | 1400 |
| Java从入门到精通 | NULL |
+--------------------------+-------+
这个结果显然不正确,所以相应的每个数据库都提供了处理null值的函数。
MSServer / Access
使用isnull函数处理
select bookname, unit *(isnull(beijing_store,0)+isnull(shanghai_store,0))
from books_stock
Oracle
Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:
select bookname, unit *(NVL(beijing_store,0)+NVL(shanghai_store,0))
from books_stock
MySQL
在 MySQL 中,我们可以使用 IFNULL() 函数,如下所示:
select bookname, unit*(ifnull(shanghai_store,0)+ifnull(beijing_store,0)) as total
from books_stock;
COALESCE() 函数
select bookname, unit*(coalesce(shanghai_store,0)+coalesce(beijing_store,0)) as total
from books_stock;
讨论区