我有以下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正在索引另一个记录(名称)。
提前致谢!
答案 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