Mysql在不存在的日期返回0
如果在指定的calldate之前没有结果,我希望在这个查询中得到一个0Mysql在不存在的日期返回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
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'