안녕하세요.
left outer join은 오른쪽의 컬럼이 없더라도 왼쪽을 기준으로 null값을 해준다고 배웠는데요.
SELECT a.date, SUM(b.score) AS total_score, SUM(b.avg) AS total_avg
FROM ymd a
LEFT OUTER JOIN report b ON a.date = b.date
WHERE a.date BETWEEN '20110101' AND '20110131'
GROUP BY a.date
이렇게 날짜별로 리포트의 점수, 평균값을 sum해서 뿌려주는 쿼리를 작성하려고 하는데
ymd라는 테이블에는 19**년 1월 1일부터 거의 무한대의 날짜까지
id date
--------------------
1 20110101
2 20110102
......
31 20110131
이런식으로 값이 들어가 있어서
report에 20110122일자의 데이터가 없더라도 score와 avg값이 null로 찍히게 하고싶습니다.
저렇게만 보면 되야하는게 맞는데 왜 report 테이블을 select로 한번 더 묶어줘야 제가 원하는 쿼리가 나오는지 모르겠습니다.
(저 상태로는 20110121 200 300 / 20110123 100 200 이런식으로 20110122일자의 값은 아예나오지도 않습니다.)
해결책은 아는데 왜 저 쿼리로는 안되는지 모르겠습니다.
꼭 알려주세요.
|