我有两个带小数值的表,使用以下语句我可以将它们全部添加并获得总数。
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
这不起作用,所以我只是想知道这样做的最佳方法是什么?
答案 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);
并在expr1
为expr0
的情况下返回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