为什么SUM()在没有选择行时返回NULL?

时间:2016-07-07 15:00:35

标签: mysql sql sum

我有这样的查询:

SELECT sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1  day))) as num_day
FROM mytable
WHERE user_id = :id
选择现在的行时,

SUM()返回NULL。我的意思是:id中不存在mytable时,num_day的结果为NULL。 根据我的需要,它不应该是NULL。它应该是0或更多。

无论如何,我如何计算条件的真实数量?这是条件:

date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1  day))

4 个答案:

答案 0 :(得分:2)

最简单的事情是用ifnull()包裹它以在0

的情况下返回null
 ifnull( sum(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1  day))), 0)

答案 1 :(得分:2)

这是你的意思吗?

SELECT COUNT(*) AS num_day
FROM mytable
WHERE user_id = :id
AND date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1  day))

如果没有要添加的内容,SUM()将返回null。 COUNT将返回实际数字,如果没有则返回0。

答案 2 :(得分:1)

  

如何计算条件的真实数?这是条件:

在条件CASE

中使用SUM
SELECT sum( CASE WHEN date_time > unix_timestamp(DATE_SUB(now(), 
                                                          INTERVAL 1  day))
                      THEN 1
                 ELSE 0
            END
          ) as num_day

答案 3 :(得分:0)

SELECT sum(if(date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1  day))),1,0) as num_day
FROM mytable
WHERE user_id = :id

使用这样的查询。