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

ユニオンの最初のクエリは、指定された時間に呼び出され、指定された時間に発生した拡張機能が来る質問で既に利用可能です。2 番目のクエリは、呼び出し回数が 0 である場合の否定です。

        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 に答える