如果我有一些MySQL,比如:
$stmt = $conn->prepare("SELECT SUM(`num1`) + SUM(`num2`) FROM database.table WHERE `id` = :id");
$stmt->bindParam(':id', $ident, PDO::PARAM_INT, 11);
$stmt->execute();
$sum2 = $stmt->fetchAll();
假设num1
的相应值为20,num2
为null,我应该期望接收20或null的$sum2[0]值吗?
此外,在使用SUM时,准备好的选择是否显示为原样或:
$stmt = $conn->prepare("SELECT SUM(`num1` + `num2`) FROM database.table WHERE `id` = :id");
或者这不是特别重要吗?
使用MySQL if
,因为SUM(any)
+NULL
=NULL
IF(num1 IS NULL,0,num1)
IF(num2 IS NULL,0,num2)
或者像这样使用:-
SELECT IFNULL(SUM(num1), 0)
或使用IFNULL
IFNULL(SUM(num1), 0)
或使用COALESCE
COALESCE(SUM(num1), 0)
sum()
忽略NULL
值。因此,它只在所有值都为NULL
时返回NULL
。
另一方面,当您将两个数字相加时,如果其中一个是NLLL
,则结果为NULL
。
因此,在第一个查询中,如果只有一行,那么结果是NULL
,因为sum(num2)
是NULL
,加法的结果是NULL
。
在第二种情况下——有一行——那么值也将是NULL
。但是,对于多行,它最终会忽略其中任意一列具有NULL
值的行。