2013-05-19 2 views
1

저는 Anime_List와 Anime_Reviews라는 두 개의 테이블을 가지고 있습니다.SQL 다른 테이블의 등급 평균 선택

Anime_List 테이블에는 Anime_Reviews의 평균 평점을받는 '평점'필드가 있습니다. 그러나 Anime_Reviews에는 일부 평점 (행)이 없으므로 현재 쿼리는 평균 평점이있는 제목 만 반환합니다. Anime_List에 나열된 각 타이틀 Anime_Reviews에는 등급 (행)가없는 경우

SELECT Anime_List.AnimeID, Anime_List.Name, Anime_List.AnimeImage, Anime_List.Synopsis, Anime_List.Type, Anime_List.Episodes, Anime_List.Genres, AVG(Anime_Reviews.Rating) 
FROM Anime_List INNER JOIN Anime_Reviews ON Anime_List.AnimeID = Anime_Reviews.AnimeID 
GROUP BY Anime_List.AnimeID, Anime_List.Name, Anime_List.AnimeImage, Anime_List.Synopsis, Anime_List.Type, Anime_List.Episodes, Anime_List.Genres 

어떻게 0.0의 값을 반환합니까? COALESCE

enter image description here

답변

4

버전 하위 쿼리

SELECT l.AnimeID, 
     l.Name, 
     l.AnimeImage, 
     l.Synopsis, 
     l.Type, 
     l.Episodes, 
     l.Genres, 
     (SELECT ISNULL(AVG(Rating), 0) Rating 
      FROM Anime_Reviews 
     WHERE AnimeID = l.AnimeID) 
    FROM Anime_List l 
+0

이것은 2 열의 등급을 반환하므로 (결과적으로 * 1) 결과가 좋았지 만 어쨌든 감사합니다. –

+0

@MegaBubbletea가 업데이트되었습니다. – peterm

+0

네, 이제 작동합니다. 하위 쿼리를 사용하는 것이 COALESCE (내 경우에는)를 사용하는 것보다 쉽습니다. –

1

사용 LEFT JOIN :

  • A Visual Explanation of SQL Joins :

    SELECT 
        l.AnimeID, 
        l.Name, 
        l.AnimeImage, 
        l.Synopsis, 
        l.Type, 
        l.Episodes, 
        l.Genres, 
        COALESCE(AVG(r.Rating), 0) AS Rating 
    FROM Anime_List AS l 
    LEFT JOIN Anime_Reviews AS r ON l.AnimeID = r.AnimeID 
    GROUP BY l.AnimeID, 
         l.Name, 
         l.AnimeImage, 
         l.Synopsis, 
         l.Type, 
         l.Episodes, 
         l.Genres; 
    

    SQL의 다른 유형에 대한 자세한 내용은이 문서하십시오를 참조 JOIN.

+0

감사를 사용! 그것은 완벽하게 작동했습니다! –

+0

@MegaBubbletea - 언제든지 환영합니다. –