2017-11-15 1 views
0

내가 가진 요구 사항은 다음과 같습니다. - 모든 레코딩 아티스트의 이름 - 각 아티스트의 노래 가락 수 - 록 음악 수가 가장 적은 아티스트가 먼저 표시되도록 정렬되었습니다.SQL에서 개수 및 대체 조건

* 일부 아티스트는 록 곡을 부를 수 없지만 여전히 목록에 포함되어야합니다.

이러한 결과를 얻는 단일 쿼리에서이 작업을 수행해야합니다.

결과 집합에서 불필요한 열을 제거하고 열을 사용자에게 친숙하고 사람이 읽을 수있는 이름으로 지정하십시오.

이것은 내가 지금까지 무엇을했는지 있습니다 : 나에게 록 음악이있는 두 아티스트 이름이 표시

SELECT recording_artist.artist_name AS "Artist Name", Musical_genre.musical_genre AS "Genre", 
     COUNT(Song.song_id) AS "Number of Songs"       
FROM Album 
JOIN recording_artist 
    ON recording_artist.recording_artist_id = album.recording_artist_id 
JOIN musical_genre 
    ON musical_genre.musical_genre_id = album.musical_genre_id 
JOIN Song 
    ON Album.album_id = Song.album_id                
GROUP BY recording_artist.artist_name, Musical_genre.musical_genre  
ORDER BY "Number of Songs" ASC 

를, 록 장르를 보여주는 열, 각각의 아티스트가 노래 록 음악의 수를.

록 노래가없는 노래를 0 곡의 록 노래로 실제로 표시하는 방법을 알 수 없습니다.

WHERE 명령을 제거하면 모든 노래와 각 노래 장르의 개수가 표시되지만 아무 것도 설정하지 않고 0으로 설정하는 방법은 없습니다. 이해를 돕기 위해 필요한 것입니다.

편집 : Microsoft SQL Server를 사용하고 있습니다.

EDIT : 편집이 필요한 출력이 빨간색으로 표시됩니다. 록 노래 수를 나타내는 총 # 곡이 필요합니다. 싱어가 록 노래를 부르지 않는다면 노래 수에 대한 값을 0 또는 NULL로 지정해야합니다.

output table

+0

어떤 [DBMS] (https://en.wikipedia.org/wiki/DBMS) 제품을 사용하고 있습니까? 포스트그레스? 신탁? "_SQL_"은 쿼리 언어 일뿐 특정 데이터베이스 제품의 이름은 아닙니다. –

+0

외부 조인 테이블의 'where' 조건은 외부 조인을 내부 조인으로 바꿉니다. 'Musical_genre.musical_genre = 'Rock'' 조건을 조인으로 이동하십시오. –

답변

0

이 작업을 시도 할 수 있습니다.

SELECT recording_artist.artist_name AS "Artist Name", Musical_genre.musical_genre AS "Genre", 
     COUNT(Song.song_id) AS "Number of Songs"       
FROM Album 
JOIN recording_artist 
    ON recording_artist.recording_artist_id = album.recording_artist_id 
LEFT JOIN musical_genre 
    ON musical_genre.musical_genre_id = album.musical_genre_id 
     AND Musical_genre.musical_genre = 'Rock 
LEFT JOIN Song 
    ON Album.album_id = Song.album_id         
GROUP BY recording_artist.artist_name, Musical_genre.musical_genre  
ORDER BY "Number of Songs" ASC