4

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

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

但是,如果任一选择返回 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

这没有用,所以我只是想知道最好的方法是如何做到这一点?

4

3 回答 3

6

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

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
于 2012-10-29T13:12:42.733 回答
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);

并且将返回expr1以防万一。expr0NULL

于 2012-10-29T13:36:31.930 回答
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
于 2012-10-29T13:13:10.197 回答