0

例如,如果计数为 0,我试图让计数显示为 0

目前的结果:

Extension    Calls
1234         1
1345         2

但我希望它显示:

Extension    Calls
1234         1
1245         0
1345         2

SELECT c.Extension,count(c.Extension),0 as Calls 
from call c
where c.callType=3 
and (c.StartTime between TIMESTAMP(CURDATE(),'06:30:00') and TIMESTAMP(CURDATE(),'07:00:00'))
group by c.Extension
4

3 回答 3

2

联合中的第一个查询已经在具有给定时间的呼叫并在给定时间发生的扩展即将到来的问题中可用。第二个查询只是对调用次数为零的查询的否定。

        SELECT c.Extension,count(c.Extension) as Calls 
        from call c
        where c.callType=3 
        and (c.StartTime between TIMESTAMP(CURDATE(),'06:30:00') and TIMESTAMP(CURDATE(),'07:00:00'))
        group by c.Extension
    union
        SELECT c.Extension,0 as Calls 
        from call c
        where (c.callType=3 
            and (c.StartTime between TIMESTAMP(CURDATE(),'06:30:00') and TIMESTAMP(CURDATE(),'07:00:00'))) = false
        group by c.Extension
    order by Extension
于 2013-03-04T23:53:10.690 回答
0
SELECT
    A.Extension,
    IFNULL(B.ExtensionCount,0) Calls
FROM
(
    SELECT DISTINCT Extension
    FROM call WHERE callType=3 AND
    StartTime BETWEEN TIMESTAMP(CURDATE(),'06:30:00')
    AND TIMESTAMP(CURDATE(),'07:00:00')
) A
LEFT JOIN
(
    SELECT Extension,COUNT(1) ExtensionCount
    FROM call WHERE callType=3 AND
    StartTime BETWEEN TIMESTAMP(CURDATE(),'06:30:00')
    AND TIMESTAMP(CURDATE(),'07:00:00')
    GROUP BY Extension
) B
USING (Extension);

请确保您有这些索引

ALTER TABLE call ADD INDEX
callType_StartTime_Extension_ndx (callType,StartTime,Extension);
ALTER TABLE call ADD INDEX Extension_ndx (Extension);

这样,查询不会从表中读取。它将从索引中读取所有内容。

于 2013-03-05T00:01:47.023 回答
0

您可以使用条件聚合来做到这一点:

SELECT c.Extension,
       sum(case when c.callType=3 and
                     c.StartTime between TIMESTAMP(CURDATE(),'06:30:00') and TIMESTAMP(CURDATE(),'07:00:00')
                then 1
                else 0
           end) as calls
from call c
group by c.Extension
于 2013-03-05T00:02:56.280 回答