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

sor*_*pot 3 mysql sql

我有两个带有十进制值的表,使用以下语句我可以将它们全部加起来并得到总数。

SELECT(
(SELECT SUM(total) from recruitment where quote_id = 1)
+
(SELECT SUM(cost) from cost WHERE quote_id = 1)
)AS total
Run Code Online (Sandbox Code Playgroud)

但是,如果任一 select 返回 null,则总数为 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
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我只是想知道执行此操作的最佳方法是什么?

Mic*_*ski 6

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

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)