我有两个带有十进制值的表,使用以下语句我可以将它们全部加起来并得到总数。
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)
这不起作用,所以我只是想知道执行此操作的最佳方法是什么?
使用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)