sql - 为什么 Sum 在数据库查询中给出 NULL

标签 sql sql-server database

假设我有一个名为“Expense”的表,它有一些按月计算的费用,其中可能包含一些“NULL”,现在我想用下面的查询来检查每年的总费用:-

enter image description here

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/

相关文章:

sql - 我需要创建一个字段,该字段是最大日期的第二个日期

mysql - 如何查询零件列表,以便可以轻松比较来自许多不同组的零件? (数据透视表?)

c# - 无法连接到 LINQ to SQL 网页上的 SQL 服务器

一个需要多个选择查询的SQL查询

没有 DB 生成框架的 PHP MySQL 页面生成

sql - ROLLBACK TRAN 会回滚所有内容吗?

sql - 如何将 sql 查询的输出读入 ant 属性?

mysql - 将 MSSQL 数据库备份导入 MySQL 工作台

sql-server - 我可以从 .NET 获取 SqlCommand 对象(带有 SQL 参数)生成的完整 SQL 字符串吗?

sql - IF/ELSE 取决于存储过程的结果