如何分组来自不同列的值sql

问题描述:

好吧,我得到了2个重要的表格,它们是TRACK和ALBUM。 (Playlisttrack不重要)。我想要做的是列出编辑另一位艺术家整个专辑的所有作曲家,即编辑同一专辑中所有曲目的作曲家。如何分组来自不同列的值sql

例如: enter image description here

在此示例中,从作曲家album1“一”编辑的所有歌曲X 1 -X 5。歌曲y1-y5有作曲家“d”和“t”,所以这不是我想要展示的。从我的示例中,我想是这样的

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

你想关系司https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/我T的不明确如果专辑中有两位艺术家A和B,当一位作曲家编辑所有A的歌曲,另一位编辑了所有B的歌曲时,是否需要2行? – Serg

我想这你想要做什么。我使用派生表来确定哪些albumids只有一个作曲家,并将其加入到查询中。

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

我想告诉谁已编辑一个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 
)