SQL 查询,将 NULL 视为零

dsa*_*ton 5 mysql sql

我正在学习 SQL(使用 MySQL)并且有一个非常简单的问题。我有一张包含员工工资和奖金信息的表格,我想将两者相加,但是当至少一个被加数为 时,让 MySQL 返回零值NULL,而不是返回NULL。什么是最简单的方法来做到这一点?

mysql> SELECT SALARY, BONUS FROM EMPLOYEE_PAY_TBL;
+----------+---------+
| SALARY   | BONUS   |
+----------+---------+
| 30000.00 | 2000.00 |
|     NULL |    NULL |
| 40000.00 |    NULL |
| 20000.00 | 1000.00 |
|     NULL |    NULL |
|     NULL |    NULL |
+----------+---------+

mysql> SELECT SALARY + BONUS FROM EMPLOYEE_PAY_TBL;
+----------------+
| SALARY + BONUS |
+----------------+
|       32000.00 |
|           NULL |
|           NULL |
|       21000.00 |
|           NULL |
|           NULL |
+----------------+
Run Code Online (Sandbox Code Playgroud)

Gol*_*rol 5

您可以使用COALESCE. 它接受许多参数并返回第一个不为空的参数。

您也可以使用IFNULL(不要与 混淆ISNULL)。在这种情况下,它的行为相同,但COALESCE更便携;它允许多个参数并返回第一个非空参数。此外,其他数据库也支持它,因此如果您将来愿意,可以更轻松地迁移到另一个数据库。

SELECT COALESCE(SALARY, 0) + COALESCE(BONUS, 0)
FROM EMPLOYEE_PAY_TBL;
Run Code Online (Sandbox Code Playgroud)

或者

SELECT IFNULL(SALARY, 0) + IFNULL(BONUS, 0)
FROM EMPLOYEE_PAY_TBL;
Run Code Online (Sandbox Code Playgroud)

两者都只是一种很方便的写法:

SELECT 
  CASE WHEN SALARY IS NULL THEN 0 ELSE SALARY END +
  CASE WHEN BONUS IS NULL THEN 0 ELSE BONUS END
FROM EMPLOYEE_PAY_TBL;
Run Code Online (Sandbox Code Playgroud)