2016-12-06 1 views
3

좋아요 ive에는 TRACK 및 ALBUM 인 2 개의 중요한 테이블이 있습니다. enter image description here다른 열의 값을 그룹화하는 방법 sql

(재생 목록 트랙은 중요하지 않음). 내가하고 싶은 일은 다른 아티스트, 즉 하나의 앨범에서 모든 트랙을 편집 한 작곡가의 전체 앨범을 편집 한 모든 작곡가를 나열하는 것입니다. 예를 들어

:이 샘플에서 enter image description here

, 작곡가 album1에서 "A"모든 노래를 편집 X1-X5. y1-y5 노래에는 작곡가 "d"와 "t"가 있습니다. 그래서 나는 그것을 표시하고 싶지 않습니다. 내 샘플에서 나는 그것을 Explaning 조금 더 나은이

enter image description here

같은 것을 싶어 : 나는 한 album.That의 모든 노래를 편집 한 모든 작곡가를 보여주고 싶은, 나는 모두를 얻을 수 있습니다 한 앨범의 음악을 모두 비교하고 같은 작곡가가 있는지 비교해보십시오. 그 방법은 잘 모릅니다.

지금까지 나는 내가이 당신이 원하는 것을 생각 더

select tr.COMPOSER,tr.NAME,alb.title,art.name as Artist 
from TRACK tr 
join album alb 
on tr.ALBUMID = alb.albumid 
join artist art 
on artistid = alb.artistid 
order by alb.title ASC; 
+0

당신은 내가 t이 분명하지 않다 https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/을 관계 부서를 원하는 앨범에 2 개의 아티스트 A와 B가있는 경우 한 곡의 작곡자가 A 곡을 편집하고 다른 곡자가 B 곡을 모두 편집 할 때 2 줄이 필요합니까? – Serg

답변

1

올 didnt가 .. 모든 아티스트, 앨범, 트랙과 작곡가가 표시되는이 시점에 도달했다. 파생 된 테이블을 사용하여 앨범 작성자 중 한 명만이 작곡가를 찾고이를 다시 귀하의 검색어에 결합 시켰습니다.

select tr.COMPOSER,tr.NAME,alb.title,art.name as Artist 
from TRACK tr 
JOIN (SELECT AlbumID, COUNT(1) as Num_Tracks FROM Track GROUP BY AlbumID HAVING COUNT(DISTINCT Composer) = 1) tr2 
ON tr.albumid = tr2.albumid 
join album alb 
on tr.ALBUMID = alb.albumid 
join artist art 
on artistid = alb.artistid 
WHERE num_tracks > 1 
order by alb.title ASC; 
+0

고마워요. 저에게 도움이되었습니다. tr.composer! = art.name; 결국 그것은 작업이 요구하는 것이기 때문입니다. 이제 하나 이상의 노래가있는 앨범 만 표시해야합니다. 끝에서 count (alb.title)> 1을 추가하는 방법을 시도했지만 작동하지 않았습니다. 어떻게해야합니까? –

+1

@SebastianAmpueroMorisaki 위의 쿼리를 수정하여 파생 테이블에 카운트를 추가했습니다. 그런 다음 그 개수에 따라 결과를 필터링하십시오. – SQLChao

1

나는, 나는 그들이 모두 같은 작곡가가있는 경우 하나의 앨범에서 모든 노래를 얻을 수와 비교해야 하나 album.That의 모든 노래를 편집 한 모든 작곡가를 보여주고 싶은,

작곡가가 전체 앨범의 모든 트랙을 편집하면이 앨범을 편집 한 다른 작곡가가 없었 음을 의미합니다.
주어진 앨범 및 작곡가에 대해이 앨범에 다른 작곡가가 존재하는지 여부를 확인하십시오. 후자의 조건은 그 앨범을 편집 한 작곡가가 단 한 명이라는 것을 의미합니다.

SELECT DISTINCT t1.albumid, t1.composer 
FROM track t1 
WHERE NOT EXISTS (
    SELECT 1 
    FROM track t2 
    WHERE t1.albumid = t2.albumid 
    AND t1.composer <> t2.composer 
) 
관련 문제