2012-10-23 2 views
2

데이터 테이블이 3 개 있습니다.다른 데이터 테이블의 평균 평점을 선택하십시오.

항목 데이터 테이블에 ID가있는 항목 (기본 키는 entryId)이 있습니다.

entryId 필드와 평가 값 (1에서 5까지)이있는 여러 항목이 EntryUsersRatings라는 또 다른 테이블에 있습니다. (등급은 한 개의 entryId에 여러 번 저장됩니다). 열 : ratingId (기본 키), entryId, rating (정수 값).

세 번째 데이터 테이블에는 entryId, languageId 및 title - translation이있는 첫 번째 테이블의 항목에 대한 번역이 있습니다.

첫 번째 데이터 테이블의 모든 항목을 제목 (언어 ID 기준)과 함께 선택하면됩니다. EntryUsersRatings에 저장된 각 항목 (여러 번 저장할 수 있음)의 평균 등급을 원합니다.

나는 이것을 시도 :

SELECT entries.entryId, EntryTranslations.title, AVG(EntryUsersRatings.rating) AS AverageRating 
FROM entries 
    LEFT OUTER JOIN 
     EntryTranslations ON entries.entryId = EntryTranslations.entryId AND EntryTranslations.languageId = 1 
    LEFT OUTER JOIN 
     EntryUsersRatings ON entries.entryId = EntryUsersRatings.entryId 
     WHERE entries.isDraft=0 
    GROUP BY title, entries.entryId 

isDraft는 항목이 필요한 모든 정보 (단지 불완전한 데이터 - 여기 우리의 경우에 무관)에 저장되지 않음을 의미 뭔가입니다.

도움을 주시면 감사하겠습니다.

편집 : 내 솔루션 등급에 대한 null 값을 제공합니다. Edit1 :이 쿼리는 완벽하게 작동합니다. 오케이, 잘못된 데이터베이스를 조사했습니다. 당신의 결과가 모든 레코드를 줄 것이다 당신이 왼쪽 외부를 사용하는 같은 항목으로 조인

SELECT entries.entryId, COALESCE(x.EntryUsersRatings, 0) as averageRating 
    FROM entries 
    LEFT JOIN(
    SELECT rr.entryId, AVG(rating) AS entryRating 
    FROM EntryUsersRatings rr 
    GROUP BY rr.entryId) x ON x.entryId = entries.entryId 
+1

정확히 무슨 일이 잘못 :

체크 아웃 DETA에 대한 링크를? – Flo

+0

게시 한 쿼리의 문제점은 무엇입니까? 오류가 있습니까? 원하는 결과가 아닌가 ??? –

+0

아, 그 얘기는 깜빡 했어요. 내 솔루션의 등급은 항상 null입니다. – CyberHawk

답변

0

@CyberHawk을 : 우리는 (나는 사람이 유용하게 찾을 희망) 우리에게 동일한 결과를 제공합니다 다른 솔루션에 온 왼쪽 테이블에서 일치하는 레코드를 오른쪽 테이블의 조인 조건과 비교합니다. 일치하지 않는 레코드의 경우 널 값을 제공합니다.

http://msdn.microsoft.com/en-us/library/ms187518(v=sql.105).aspx

+1

하지만 올바른 테이블에서 결과를 얻지 못했습니다 ... 이것이 내 문제의 원인입니다. – CyberHawk

+0

다음 쿼리를 사용하여 시도하십시오 SELECT e. entryId, et. 제목, AVG (eu. 등급) 항목에서 LEFT OUTER JOIN EntryUsersRatings eu.entryId = e.entryID LEFT OUTER JOIN EntryTranslations et ON et. entryId = e.entryId WHERE et. languageId = 1 AND e.isDraft = 0 GROUP BY eu. 등급, entryId, et. 표제 – RVD

관련 문제