为什么以下代码始终返回NULL
?
SELECT if(sum(amount)=NULL,0,sum(amount)) as amount
FROM item_details
WHERE order_id = 1390;
答案 0 :(得分:4)
您的语句只应在值为NULL
时返回NULL
。条件sum(amount) = NULL
将始终返回" unknown",其被视为" false"。因此,只返回else
部分而if
并没有真正做任何事情。
您可能打算sum(amount) is null
。
如另一个答案所述,coalesce()
是一个更好的解决方案。正确的形式是:
select coalesce(sum(amount), 0)
from item_details
where order_id = 1390;
如果你这样做:
select sum(coalesce(amount, 0))
from item_details
where order_id = 1390;
如果没有匹配,您仍会获得NULL
。
答案 1 :(得分:2)
与mysql中的NULL进行比较会产生NULL。请改用sum(amount) IS NULL
或sum(amount) IS NOT NULL
。
http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
答案 2 :(得分:0)
尝试更改为
总和(合并(金额,0))作为金额
答案 3 :(得分:0)
尝试这样的事情:
SELECT if((sum(amount))=NULL,0,sum(amount)) as amount
FROM item_details
WHERE order_id = 1390;
答案 4 :(得分:0)
SELECT if(sum(amount)=NULL,0,sum( coalesce( amount, 0 ))
FROM item_details
WHERE order_id = 1390;
答案 5 :(得分:0)
这是您正在寻找的查询吗?
SELECT IFNULL(SUM(I.amount),0) as amount
FROM item_details I
WHERE I.order_id = 1390
GROUP BY I.order_id
我使用IFNULL
和GROUP BY
子句来获得预期的结果。
希望这会对你有所帮助
答案 6 :(得分:0)
NULL
不等于任何值,不等于NULL
。
NULL
表示:未设置值 - >未知的价值。您无法将NULL
与正常比较运算符(=,<,>等)进行比较,它没有任何价值。
SUM(Amount) = NULL
始终为UNKNOWN
。 UNKONWN
在比较中被称为FALSE。
您可以通过其相关函数和比较运算符(例如NULL
,COALESCE(expr1, expr2, ..., exprN)
等)处理IS NULL
值。
有关详细信息,请参阅MySQL documentation - Working with NULL Values。
您应该将if(sum(amount)=NULL,0,sum(amount))
表达式更改为COALESCE(SUM(amount), 0)
以实现目标。
COALESCE()
返回第一个非空表达式。