2016-12-06 4 views
3

Ok ive получил 2 важные таблицы, которые являются TRACK и ALBUM. enter image description hereкак группировать значения из разных столбцов sql

(Playlisttrack не имеет значения). То, что я хочу сделать, - это список всех композиторов, которые отредактировали целый альбом от другого исполнителя, то есть композитора, который редактировал все треки с одного альбома.

Например: enter image description here

В этом примере, композитор "а" редактировать все песни x1-x5 от album1. Песни y1-y5 имеют композитор «d», а также «t», так что это не то, что я хочу отобразить. Из моего образца я хочу, чтобы получить что-то вроде этого

enter image description here

Explaning это немного лучше: я хочу, чтобы показать все композиторы, которые редактировали все песни одного 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

Вы хотите реляционную подразделение https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/ я т не ясно если в альбоме есть 2 исполнителя A и B, вам нужно 2 ряда, когда один композитор редактировал все песни A, а другой редактировал все песни B? – Serg

ответ

1

Я думаю, что это делает то, что вы хотите. Я использовал производную таблицу, чтобы выяснить, какие у альбомов есть только один композитор, и присоединился к этому назад к вашему запросу.

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; в конце, потому что это то, что задает задача. Теперь я должен отображать только альбомы с более чем одной песней, я пытался добавить счет (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 
) 
Смежные вопросы