2012-08-06 2 views
3

저는 구글 전체를 조사해 왔습니다. 나는 대답을 이해하기 위해 어리 석을 수 있습니다.MYSQL 싱글 테이블 카운트()는 NULL이더라도 보여줍니다.

나는 mysql - issues에 테이블이있다.

+-------------+---------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+---------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | 
| status  | varchar(255) | YES | 
+-------------+---------------+------+ 

각 문제마다 상태가 있습니다.

SELECT 상태, COUNT (*) 문제 FROM '총'(DATE (logged_at)> =) GROUP BY와 같은 : 나는 선택이 모든 문제를 계산 및 상태별로 나열하려고 노력하고

보고서 이 을 고정 문제는

참조 된 에스컬레이션 고정되지 - - 상태

5 개 가지 상태가 있습니다 내 count>가 0이면 select 만 상태를 표시합니다. count = null 인 경우에도 모든 상태를 어떻게 표시합니까?

IFNULL을 시도했지만 운이 없습니다. 또한 사람들이 왼쪽 조인 솔루션에 대해 이야기하는 것을 보았습니다.하지만 여러 테이블 문제가있었습니다.

많은 감사 !!!

+0

이것은 * 여러 테이블 문제입니다. 상태를 나열하는 하나의 테이블과 데이터가있는 하나의 테이블이 필요합니다. – MatBailie

답변

1

해결 방법은 위의 5 가지 상태가 모두 포함 된 테이블에서 LEFT JOIN으로 넘어갔습니다.

SELECT 
    st.status 
    , COUNT(issues.status) AS total 
FROM 
    (SELECT 'Active' AS status UNION ALL 
     SELECT 'Inactive' UNION ALL 
     ... 
     SELECT 'Super' 
    ) AS st 
    LEFT JOIN 
    issues 
     ON issues.status = st.status 
     AND issues.logged_at >= ?  -- no reason to use DATE() function here 
GROUP BY st.status ; 
1

당신은 추가 테이블 (예를 들면라는 상태)가 필요합니다 목록을 저장 : 당신은 이러한 테이블이없는 경우 (때마다 당신이 그것을 필요) permament 또는 즉석에서 그것을 만들 수 있습니다 모든 상태, 즉 이슈 테이블과 같은 유형의 필드 하나를 선택하고 필드에 인덱스를 넣었는지 확인하십시오.

그런 다음 SQL 트릭을 수행해야합니다

select statuses.status,count(issues.id) from issues right join statuses on issues.status=statuses.status group by statuses.status 

추가 테이블의 장점은 당신이 이제까지 다른 상태를 가지고 결정해야한다, 당신이 할 필요가없이 테이블에 추가입니다 기존 SQL 문을 변경합니다.