使用ISNULL将NULL设置为零

时间:2014-05-07 16:40:44

标签: sql mysqli

我有以下SQL语句:

SELECT name, SUM(growth) AS sum_buy_price, SUM(recovery) AS sum_msrp, SUM(growth)+SUM(recovery) AS total FROM orders WHERE id = '$id' GROUP BY name

我的数据来自我无法控制的csv文件,“增长”或“恢复”在数据中可以为NULL,但不能同时为NULL。我需要使用ISNULL将可能的NULL值转换为零,以使SUM正常工作,但我不确定如何/在何处添加ISNULL,因为SELECT正在索引另一个记录(名称)。

提前致谢!

3 个答案:

答案 0 :(得分:2)

ISNULL返回传递的参数是否为空(即,它类似于true或false)。我想,你需要的是IFNULL:

SELECT
  name,
  SUM(IFNULL(growth, 0))                         AS sum_buy_price,
  SUM(IFNULL(recovery, 0))                       AS sum_msrp,
  SUM(IFNULL(growth, 0))+SUM(IFNULL(recovery,0)) AS total
FROM
  orders
WHERE
  id = '$id'
GROUP BY
  name

答案 1 :(得分:1)

SUM()函数会忽略NULL个值,因此您无需将NULL更改为0,以使其正常工作。< / p>

但是,如果您汇总的所有值均为NULL,并且您想要返回0而不是NULL,则可以使用IFNULL()或更多通用COALESCE()0显示为总和,而不是NULL

SELECT COALESCE(SUM(growth),0)

ISNULL()是一个有效的SQL Server函数,IFNULL()在MySQL中是等价的,但是所有主要数据库都使用COALESCE()来返回集合中的第一个非NULL值,即:COALESCE(NULL,NULL,5)将返回5

答案 2 :(得分:0)

这应该适合你:

SELECT name, SUM(ISNULL(growth, 0)) AS sum_buy_price, 
SUM(ISNULL(recovery, 0)) AS sum_msrp, 
SUM(ISNULL(growth, 0))+SUM(ISNULL(recovery,0)) AS total 
FROM orders 
WHERE id = '$id' 
GROUP BY name