2011-12-27 6 views
0

다음 쿼리가 있습니다. 내가 필요로하는 것은 그들이 그 주에 대한 등급이없는 경우에도 직원을 반환하는 것입니다JOIN이 모든 행을 표시하지 않습니다.

36, Employee1, 2.9091 
37, Employee2, 3.5000 
37, Employee1, 3.7143 
38, Employee2, 4.2000 
38, Employee1, 4.0000 
39, Employee2, 2.0000 
40, Employee2, 2.8333 
40, Employee1, 3.8571 
41, Employee1, 2.6667 
43, Employee2, 2.5000 
43, Employee1, 1.5714 
44, Employee2, 3.8333 
44, Employee1, 4.4000 
45, Employee2, 3.2500 
45, Employee1, 4.8571 
46, Employee2, 2.1667 
46, Employee1, 2.2000 
48, Employee2, 2.6667 
49, Employee2, 1.4000 
49, Employee1, 3.5000 
50, Employee2, 2.0000 
50, Employee1, 1.5000 
51, Employee2, 2.7143 
51, Employee1, 2.7500 

: 같은

SELECT WEEK(Review.created)        AS Week, 
     CONCAT(Employee.firstname, ' ', Employee.lastname) AS Name, 
     AVG(Rating.scale)         AS Average 
FROM employees Employee 
     LEFT JOIN reviews Review 
     ON Employee.id = Review.reviewee_id 
     LEFT JOIN ratings AS Rating 
     ON Rating.id = Review.rating_id 
WHERE Employee.id IN (71, 72) 
GROUP BY WEEK(Review.created), 
      Employee.id 
ORDER BY WEEK(Review.created), 
      Employee.id 

결과를 보인다.

그래서 처음 두 행이에

36, Employee1, 2.9091 
36, Employee2, NULL 

어떤 도움도 대단히 감사하겠습니다 반환합니다.

+1

모든 주를 포함하는 소스에 외부 조인이 필요합니다. –

+0

이렇게하면 더미 캘린더 테이블을 만들어야 할 필요가 있습니까? – Jeff

+0

가장 효율적인 방법이 될 것입니다. 당신은'DISTINCT WEEK (created) FROM Review'을 할 수도 있지만 제안하지는 않을 것입니다. –

답변

0

변경 조항에 의해 그룹을 어떻게되는지 먼저 검토 주에 당신이 그룹의 경우, 어떤 그주의 리뷰가없는 직원은 먼저 NULL (week(null) -> null)에 그룹화됩니다.

+0

그건 작동하지 않습니다. 데이터가 없으면 결과에 표시되지 않습니다. –

+0

직원 기록은 주어진 주에 평점을 받았는지 여부에 관계없이 존재합니다. –

+1

그들이 원하는 것은 36 일에 직원이 등급을 얻지 못했지만 결과에 '36, Employee2'가 나타나는 것입니다. 'GROUP BY'절의 순서는 이상한 MySQL 문제가 아니라면 아무런 차이가 없습니다. –

관련 문제