2010-11-20 3 views
1

나는이 쿼리에 의해 해결해야 문제 '다른 테이블의 해당 행 수와 한 테이블에서 모든 행을 얻을'고전했다 :이 집계 쿼리가 필요한 것보다 적은 수의 행을 반환하는 이유는 무엇입니까?

SELECT 
    ideas.id, 
    ideas.idea, 
    submitted, 
    COUNT(votes.id) AS vote_count 
FROM ideas 
LEFT OUTER JOIN votes ON ideas.id = votes.idea 
WHERE dead = 0 
GROUP BY votes.idea 
ORDER BY vote_count DESC, submitted DESC 
LIMIT 10; 

아이디어 (죽은 = 0) 4 개 행이 있습니다 그리고 첫 번째 아이디어와 관련하여 한 줄의 득표를했다. 그러나이 쿼리는 올바른 vote_count와 함께 두 개의 레코드 (아이디어 # 1과 아이디어 # 2)를 반환합니다. 왜 이것이 모든 기록을 아이디어로 돌려 보내지 않는 것일까 요?

답변

3

GROUP BY votes.idea라고 말하면 아이디어 값당 하나의 결과 행을 투표에 요청합니다. 투표에 행이 하나만 있다고 가정하면 결과에 두 개의 레코드 만 있으면됩니다. 하나는 해당 행에있는 아이디어 값에 해당하고 다른 하나는 NULL (일치하는 투표 레코드가없는 세 개의 행을 압축)입니다.

GROUP BY ideas.idea을 찾으셨습니까?

+0

아하 지금 감사합니다. 긴 하루 였어 ... – Ross

1

변경 :

GROUP BY votes.idea 

에 :

GROUP BY ideas.id 

votes.idea 때문에이 NULL이 될 수 있습니다.

관련 문제