【问题标题】:SQL Converting sum of null values to 0SQL将空值的总和转换为0
【发布时间】:2019-02-22 12:23:04
【问题描述】:

我在 SQL 中有一个查询,它对值求和并将它们作为月份添加到日期中。

    SELECT
    FROM_UNIXTIME(S.created) as start_date, 
   (FROM_UNIXTIME(S.created) + INTERVAL (C.items_left + C.items_given) MONTH)
    AS end_date,
    FROM table1 S
    LEFT JOIN table2 C ON C.id = S.id;

当其中一些要求和的值是 null 而不是 0 并且我无法更改数据源时,就会出现问题。

(FROM_UNIXTIME(S.created) + INTERVAL (C.items_left + C.items_given) MONTH)
AS end_date,

正在生成空值,因为 (C.items_left + C.items_given) 为空值。

那么,问题是,我如何执行这个 sum 以使结果为 0 而不是 null?

【问题讨论】:

标签: mysql sql null sum


【解决方案1】:

使用coalesce

SELECT
    FROM_UNIXTIME(S.created) as start_date, 
   ( coalesce(FROM_UNIXTIME(S.created),0) + INTERVAL coalesce((coalesce(C.items_left,0) + coalesce(C.items_given,0)),0) MONTH)
    AS end_date,
    FROM table1 S
    LEFT JOIN table2 C ON C.id = S.id;

【讨论】:

  • 反正我只是把它放在总和coalesce(C.items_left + C.items_given) 中,因为它是空数据的唯一来源。
  • @Belen 你也可以对 items_left 和 items_given 进行内部处理
  • @Belen inner 是安全的,否则如果 items_left null 并且 items_given 在这种情况下具有值 null+val 也使其为 null
  • @zaybul,同意,我会接受你的查询,它的工作原理很完美。谢谢!
【解决方案2】:

使用COALESCE():

(FROM_UNIXTIME(S.created) + INTERVAL (COALESCE(C.items_left, 0) + COALESCE(C.items_given, 0)) MONTH)

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多