假设我有一个名为“Expense”的表,它有一些按月计算的费用,其中可能包含一些“NULL”,现在我想用下面的查询来检查每年的总费用:-
Select Sum(January) + Sum (February) ..... (I skipped the rest 10 months)
from Expense
结果为“NULL”
如何避免这种情况?我觉得有更方便的方法可以查看年费
最佳答案
所有涉及 NULL 的算术或逻辑运算都会产生 NULL。例如:
SELECT 1 + NULL -- NULL
您必须先将 NULL 转换为零,然后才能+
它们:
SELECT
COALESCE(SUM(January), 0) +
COALESCE(SUM(February) , 0) +
...
也可以先加列再求和:
SELECT SUM(
COALESCE(January, 0) +
COALESCE(February, 0) +
)
请注意 (i) SUM 跳过 NULL 值 (ii) 如果所有值都为 NULL,则返回 NULL 而不是 0:
SELECT SUM(a) FROM (VALUES
(1),
(2),
(NULL)
) AS v(a) -- returns 3 instead of NULL
如果遇到的所有 值都是 NULL,它将返回 NULL:
SELECT SUM(a) FROM (VALUES
(CAST(NULL AS INT)),
(NULL),
(NULL)
) AS v(a) -- returns NULL instead of 0
关于sql - 为什么 Sum 在数据库查询中给出 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52698064/