SQL Lite - SUM 返回 null 而不是 0(零)值

red*_*rom 3 javascript sqlite

我有这个 SQL 查询:

var sqlQuery =
  "SELECT '"+dateRanges[ic].DATE_FROM+"' as DATE_FROM, "+
  " '"+dateRanges[ic].DATE_TO+"' as DATE_TO, "+
  " COUNT(*) AS DIALS_CNT, "+
  " SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_APPT+"' THEN 1 ELSE 0 END) AS '"+APPT_CNT+"', "+
  " SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_CONV_NO_APPT+"' THEN 1 ELSE 0 END) AS '"+CONVERS_CNT+"' , "+
  " SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_CANNOT_REACH+"' THEN 1 ELSE 0 END) AS '"+CANNOT_REACH_CNT+"' "+
  " FROM "+DIALED_CALLS_TABLE+" dc "+
  " WHERE  dc.date BETWEEN '"+dateRanges[ic].DATE_FROM+"' AND '"+dateRanges[ic].DATE_TO+"';";
Run Code Online (Sandbox Code Playgroud)

问题是,如果值的总和为零,结果将包含 null 值。我以为我可以使用它来解决它,THEN 1 ELSE 0 END 但它不起作用。

我该如何解决它以获得零而不是空的结果?

谢谢你的帮助。

CL.*_*CL. 5

当 SUM 没有获取任何开始值时(即,当您的 WHERE 子句不匹配任何行时),它会返回 NULL。

如果您可以接受浮点数结果,请将 SUM 替换为TOTAL。否则,您可以在整个总和周围放置一个 IFNULL:

SELECT ... IFNULL(SUM(CASE ... END), 0) FROM ...
Run Code Online (Sandbox Code Playgroud)