Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询,将NULL视为零_Mysql_Sql - Fatal编程技术网

Mysql SQL查询,将NULL视为零

Mysql SQL查询,将NULL视为零,mysql,sql,Mysql,Sql,我正在学习SQL(使用MySQL),有一个非常简单的问题。我有一个包含员工工资和奖金信息的表,我想将两者相加,但是当至少有一个summand为NULL时,让MySQL返回值0,而不是返回NULL。最简单的方法是什么 mysql> SELECT SALARY, BONUS FROM EMPLOYEE_PAY_TBL; +----------+---------+ | SALARY | BONUS | +----------+---------+ | 30000.00 | 2000.0

我正在学习SQL(使用MySQL),有一个非常简单的问题。我有一个包含员工工资和奖金信息的表,我想将两者相加,但是当至少有一个summand为
NULL
时,让MySQL返回值0,而不是返回
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 |
+----------------+
你可以用。它接受许多参数,并返回第一个非空参数

您也可以使用
IFNULL
(不要与
ISNULL
混淆)。在这个场景中,它的行为相同,但是
COALESCE
更便于移植;它允许多个参数,并返回第一个非空参数。另外,其他数据库也支持它,因此,如果您将来愿意,迁移到另一个数据库会稍微容易一些

SELECT COALESCE(SALARY, 0) + COALESCE(BONUS, 0)
FROM EMPLOYEE_PAY_TBL;

两者都是一种非常方便的书写方式:

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;
从员工薪酬列表中选择IFNULL(工资,0)、IFNULL(奖金,0)

您应该为此使用
IFNULL
函数


已更正

非常好,谢谢!我添加了一点解释。这似乎给出了一个错误:
mysql>从EMPLOYEE\u PAY\u TBL中选择ISNULL(薪水,0),ISNULL(奖金,0);错误1582(42000):对本机函数“ISNULL”的调用中的参数计数不正确。
。对不起,我打错了
IFNULL
是正确的。
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;