如果没有记录,如何使 MySQL SUM 查询返回零而不是 null?

How can I make a MySQL SUM query return zero instead of null if there are no records?

提问人:Richard Knop 提问时间:8/23/2009 最后编辑:JohnFxRichard Knop 更新时间:2/10/2022 访问量:26633

问:

这是我选择的查询:

SELECT SUM(rating) AS this_week 
FROM table_name 
WHERE UNIX_TIMESTAMP(created_at) >= UNIX_TIMESTAMP() - 604800)

这基本上计算了上周项目评级(604800 是 1 周内的秒数)。

问题是,当表中没有行时,this_week将作为 NULL 返回。我希望查询返回 0,以防表中没有行。怎么做?

sql mysql

评论


答:

72赞 Jimmy Stenke 8/23/2009 #1

这应该可以解决问题:

SELECT COALESCE(SUM(rating),0) AS this_week FROM table_name 
  WHERE UNIX_TIMESTAMP(created_at) >= UNIX_TIMESTAMP() - 604800)

COALESCE 是一个函数,它将从列表中返回第一个非 NULL 值。

37赞 CMerat 8/23/2009 #2

你不能用吗?IFNULL(SUM(rating), 0)

评论

1赞 enemetch 5/18/2017
在使用 CI 活动记录时,此解决方案比公认的答案更适合。谢谢
-2赞 Leon Tang 2/1/2022 #3

试试这个: 总和(IFNULL(评分, 0))

评论

2赞 General Grievance 2/2/2022
这个问题在很长一段时间内都得到了很好的回答。请编辑并解释为什么这比现有的更好。