데이터 테이블이 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
정확히 무슨 일이 잘못 :
체크 아웃 DETA에 대한 링크를? – Flo
게시 한 쿼리의 문제점은 무엇입니까? 오류가 있습니까? 원하는 결과가 아닌가 ??? –
아, 그 얘기는 깜빡 했어요. 내 솔루션의 등급은 항상 null입니다. – CyberHawk