我正在学习 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)
您可以使用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)