Mysql在非现有日期返回0

时间:2015-03-30 14:48:53

标签: mysql mysql-workbench

这是一个查询,如果指定的calldate没有结果,我有兴趣获得0。

SELECT ifnull(count(*),0),
     FROM `cdr2015`  
        WHERE dst in ('602','603','605')  
     AND ifnull(DATE_FORMAT(calldate, '%Y-%m-%d') = '2015-04-20' ,0)
     AND disposition = 'NO ANSWER' 
     AND ((WEEKDAY(calldate) > 4) 
     OR 
     (WEEKDAY(calldate) < 5)  
     AND ((ifnull(DATE_FORMAT(calldate, '%T') >= '20:01:00',0))
     OR (ifnull(DATE_FORMAT(calldate, '%T') <= '07:59:00',0)))) 
     GROUP BY dst;

有没有办法在非现有字段calldate上获得0?这是给我提问AND ifnull(DATE_FORMAT(calldate, '%Y-%m-%d') = '2015-04-20' ,0)的代码。无法找到计数(*)的0,我不能使用另一个表来进行DST字段的内连接...

数据样本

QUERY

        SELECT ifnull(count(*),0) as test
     FROM `cdr2015`  
        WHERE dst in ('602','603','605')  
     AND disposition = 'NO ANSWER' 
     AND ((WEEKDAY(calldate) > 4) 
     OR 
     (WEEKDAY(calldate) < 5)  
     AND ((ifnull(DATE_FORMAT(calldate, '%T') >= '20:01:00',0))
     OR (ifnull(DATE_FORMAT(calldate, '%T') <= '07:59:00',0)))) 
     GROUP BY dst;

输出:

 test
 25
 30
 50

QUERY:

     SELECT ifnull(count(*),0) AS test
     FROM `cdr2015`  
        WHERE dst in ('602','603','605')  
     AND ifnull(DATE_FORMAT(calldate, '%Y-%m-%d') = '2015-03-29' ,0)
     AND disposition = 'NO ANSWER' 
     AND ((WEEKDAY(calldate) > 4) 
     OR 
     (WEEKDAY(calldate) < 5)  
     AND ((ifnull(DATE_FORMAT(calldate, '%T') >= '20:01:00',0))
     OR (ifnull(DATE_FORMAT(calldate, '%T') <= '07:59:00',0)))) 
     GROUP BY dst;

输出:没有...

1 个答案:

答案 0 :(得分:0)

必须存在数据以获得零(或任何值)作为回报。所以你将无法得到那个结果。但是使用COUNT(*)它会返回一条记录,说&#34; 0&#34;无论如何找到结果,所以一旦你更正了查询中的一些括号,你就可以得到你想要的结果。

您的查询在括号中有点错误。

修复括号中的所有行。例如:

您的代码:

SELECT ifnull(count(*),0),
 FROM `cdr2015`  
    WHERE dst in ('602','603','605')  
 AND ifnull(DATE_FORMAT(calldate, '%Y-%m-%d') = '2015-04-20' ,0)

如果你这样做可能会好得多:

SELECT count(*)
 FROM `cdr2015`  
    WHERE dst in ('602','603','605')  
 AND DATE_FORMAT(calldate, '%Y-%m-%d') = '2015-04-20'

IFNULL位于where子句中的完整AND。这永远不会奏效。

count(*)将始终返回一个整数,因此不需要IFNULL语句。

你的其他IFNULL语句也需要更正(出于教育目的,你可以自己做)。