2012-02-21 6 views
-1

비슷한 질문을 보았습니다.하지만 그 중 많은 부분이 상황이 다르기 때문에 원하는대로 작동시키지 못하고 일부 도움을 받으러 왔습니다.count()에 0을 반환합니다.

사용자는 특정 기간 동안 여러 도시를 거주했습니다.

내가 속한 다른 모든 도시에 0을 반환하도록 계산하려면 어떻게해야합니까? BETWEEN 날짜를 벗어 났습니까?

SELECT cityname, COUNT(cityname) AS city_count 

FROM cities 

LEFT OUTER JOIN people ON cities.id = people.cityid 

WHERE firstname = 'John' AND lastname = 'Doe' 

AND RESIDENCY_DATE 

BETWEEN '1996-08-01' 

AND '1997-05-31' 

GROUP BY cityname 

쿼리 출력 :

city | city_count 
    ___________________ 

    cali   1 
    seattle  2 

예상 출력 :

city | city_count 
    ___________________ 

    cali   1 
    seattle  2 
    washington 0 
    new york  0 

나는 날짜 사이의 어떤 계산하지만 0을 반환하고 싶습니다 그들이 살았던 다른 모든 도시들.

(모든 행은 people.cityid 열임)

+0

테이블 구조는 두 개의 테이블에 무엇입니까? 각 열은 어떤 테이블에 있습니까? 귀하의 데이터는 어떻게 생겼습니까? –

답변

1

다음이 작동합니다. 또한 BETWEEN 논리를 정리하여 1997-05-31까지 일치시킬 수있는 자유를 확보했습니다.

는 모든 도시를 선택한 다음 기준에 일치하는 사람들이 특히

SELECT 
    cities.cityname, 
    COALESCE(COUNT(inTimePeriod.id),0) AS city_count 

FROM cities 

// Find all cities the user has lived in 

INNER JOIN people AS hasLivedIn 
    ON hasLivedIn.cityid = cities.id 
    AND people.firstname = 'John' 
    AND people.lastname = 'Doe' 

// Now rejoin the ones that they've lived in in the specified time 

LEFT JOIN people AS inTimePeriod 
    ON inTimePeriod.cityid = hasLivedIn.cityid 
    AND inTimePeriod.RESIDENCY_DATE BETWEEN DATE('1996-08-01') AND DATE('1997-05-31') 

GROUP BY cities.cityname 
+1

오, 왜 다시 거기 :) 나는 당신이 자러 간 줄 알았는데? ;) 또한, 전에 들어 본 적이없는 키워드를 계속 사용합니다! – Tek

+0

나는 깨어났다.) 그리고 항상 얇은 공기에서 새 것을 뽑아내는 것이 좋다. - 단지 실수가 아닌지 확인해야한다 : D –

+0

다시 한번 감사 드리며, 올바르게 받아들이 기 위해 약간의 시간을 보냈다. 열 이름은 정확히 같지 않았지만 모두 끝났습니다. 충분하게 고마워 할 수 없다. :) – Tek

0

사용 COUNT(DISTINCT) 매칭되는 열이없는 경우는 0을 반환을 계산합니다.

아래에보십시오 :

SELECT cityname, COUNT(distinct cityname) AS city_count 
    FROM cities 
    LEFT OUTER JOIN people ON cities.id = people.cityid 
    WHERE firstname = 'John' AND lastname = 'Doe' 
    AND RESIDENCY_DATE 
    BETWEEN '1996-08-01' 
    AND '1997-05-31' 
    GROUP BY cityname 
+0

어떤 이유인지, distinct는 그것을 잘못 계산한다. 오 잘. – Tek

관련 문제