2014-09-04 8 views
0

검색 중이므로 에 대한 답변을 찾을 수 없습니다.MySQL NULL 값을 GROUP BY HOUR로 채우기 쿼리

나는 내가 원하는 결과를 생산할 예정이 쿼리

SELECT 
HOUR(ce.datetime_entry_queue) hour, 
COUNT(ce.id) incoming, 
COUNT(IF(ce.datetime_init IS NULL,1,NULL)) dropped, 
COUNT(IF(ce.datetime_init IS NOT NULL,1,NULL)) answered 
FROM 
call_center.call_entry ce 
WHERE 
ce.datetime_entry_queue>='2014-09-04 15:00:00' AND 
ce.id_campaign='1' 
GROUP BY HOUR(ce.datetime_entry_queue) 

이 함께 얻을거야 시간별 보고서를 만들고 싶어.

|hour|incoming|dropped|answered| 
|----|--------|-------|--------| 
| 15 | 200 | 2 | 198 | 
| 16 | 220 | 10 | 210 | 
| 17 | 154 | 0 | 154 | 

마녀 괜찮 다음,하지만 만약 있다면 17:00까지 16:00 내가 다음과 같은 결과를 얻을 것이다 16 시간에는 전화가 없습니다로 저에게 결과를 제공합니다.

|hour|incoming|dropped|answered| 
|----|--------|-------|--------| 
| 15 | 200 | 2 | 198 | 
| 17 | 154 | 0 | 154 | 

어떻게 쿼리 내가 시간을 포함하는 테이블을 만드는 시도했습니다이

|hour|incoming|dropped|answered| 
|----|--------|-------|--------| 
| 15 | 200 | 2 | 198 | 
| 16 | 0 | 0 | 0 | 
| 17 | 154 | 0 | 154 | 

처럼 0 값으로 null 값의 행을 반환받을 수 (0 - 23)

CREATE TABLE `report_hours` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `hour` INT(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 
AUTO_INCREMENT=25; 

검색어 :

SELECT 
rh.hour, 
COUNT(ce.id) incoming, 
COUNT(IF(ce.datetime_init IS NULL,1,0)) dropped, 
COUNT(IF(ce.datetime_init IS NOT NULL,1,0)) answered 
FROM 
call_center.report_hours rh 
LEFT JOIN 
call_center.call_entry ce 
ON 
HOUR(ce.datetime_entry_queue)=rh.hour 
WHERE 
ce.datetime_entry_queue>='2014-09-05 15:00:00' AND 
ce.id_campaign='1' 
GROUP BY rh.hour 

도와주세요.

답변

0

이 작동합니다 감사합니다

SELECT 
    rh.hour, 
    COUNT(ce.id) incoming, 
    COUNT(IF(ce.datetime_init IS NULL,1,NULL)) dropped, 
    COUNT(IF(ce.datetime_init IS NOT NULL,1,NULL)) answered 
FROM 
    call_center.report_hours rh 
LEFT JOIN 
    call_center.call_entry ce ON 
    HOUR(ce.datetime_entry_queue)=rh.hour AND 
    ce.datetime_entry_queue>='2014-09-05 15:00:00' AND 
    ce.id_campaign='1' 
GROUP BY rh.hour 

무엇이 잘못된 쿼리와 함께 :

  1. COUNT(IF(ce.datetime_init IS NULL,1,0)) - 카운트 모든 행이 제대로 나는 NULL0 변경 작업을 할 수 있습니다. 또한 다음과 같이 변경할 수 있습니다 : SUM(IF(ce.datetime_init IS NULL,1,0))

  2. LEFT JOIN table_name을 사용할 경우 지정된 표와 관련된 모든 조건식은 LEFT JOIN ... ON 절 이하 여야합니다. 이들이 WHERE 아래에 있으면 NULL 값 (call_center.call_entry 테이블과 일치하지 않는 경우)을 가진 모든 행을 효과적으로 필터링합니다.

+0

매력처럼 작동합니다 .-) 감사합니다. – user1972670

+0

듣기 좋습니다! 설명을 추가했습니다. – Rimas