Mysql在不存在的日期返回0

Mysql在不存在的日期返回0,mysql,mysql-workbench,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 ((WEEKDA

如果在指定的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;
输出:

 test
 25
 30
 50
查询:

     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;

输出:无…

数据必须存在才能获得零或任何值作为回报。因此,您将无法获得该结果。但是,使用COUNT*时,它将返回一条记录,表示“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)
如果您这样做,可能会更好:

SELECT count(*)
 FROM `cdr2015`  
    WHERE dst in ('602','603','605')  
 AND DATE_FORMAT(calldate, '%Y-%m-%d') = '2015-04-20'
IFNULL位于complete和where子句中。这是行不通的

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


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

对不起,我不知道您在问什么。您能否显示示例数据、预期结果和当前结果?如果nullcount*,0没有意义。@Neville K刚刚更新了此语句:WEEKDAYcalldate>4或WEEKDAYcalldate<5,您希望对其执行什么操作?工作日值为[0-6]整数,日索引。
SELECT count(*)
 FROM `cdr2015`  
    WHERE dst in ('602','603','605')  
 AND DATE_FORMAT(calldate, '%Y-%m-%d') = '2015-04-20'