IFNULL可以与select语句一起使用吗?

时间:2012-10-29 13:11:33

标签: mysql sql

我有两个带小数值的表,使用以下语句我可以将它们全部添加并获得总数。

SELECT(
(SELECT SUM(total) from recruitment where quote_id = 1)
+
(SELECT SUM(cost) from cost WHERE quote_id = 1)
)AS total

但是如果其中一个选择重新生成null,那么total为null,所以我尝试使用ISNULL返回0而不是null,如下所示:

SELECT(
(IFNULL(SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0)
+
(IFNULL(SELECT SUM(cost) FROM cost WHERE quote_id = 1),0)
)AS total

这不起作用,所以我只是想知道这样做的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

使用COALESCE()返回其第一个非null参数,并可以用零替换整个表达式。

SELECT(
  COALESCE((SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0)
  +
  COALESCE((SELECT SUM(cost) FROM cost WHERE quote_id = 1),0)
)AS total
在这种情况下,

IFNULL()应该以相同的方式工作 - 我怀疑你可能有不正确的括号导致语法错误。

/* Should work too. Make sure the inner SELECT is enclosed in () */
SELECT(
  IFNULL((SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0)
  +
  IFNULL((SELECT SUM(cost) FROM cost WHERE quote_id = 1),0)
)AS total

答案 1 :(得分:3)

尝试使用

 SELECT(
(SELECT IFNULL((SELECT SUM(total) FROM recruitment WHERE quote_id=1),0))
+
(SELECT IFNULL((SELECT SUM(cost) FROM cost WHERE quote_id=1), 0))
)AS total

IFNULL是一种必须在SELECT语句中使用的结构,如

SELECT IFNULL(expr0,expr1);

并在expr1expr0的情况下返回NULL

答案 2 :(得分:1)

在总结之前使用COALESCE

SELECT ((SELECT SUM(COALESCE(total,0)) FROM recruitment WHERE quote_id = 1) +
        (SELECT SUM(COALESCE(cost,0)) FROM cost WHERE quote_id = 1)) AS TOtal