这是一个查询,如果指定的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;
输出:没有...
答案 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语句也需要更正(出于教育目的,你可以自己做)。