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

时间:2016-12-06 17:24:32

标签: sql oracle

好的,我有2个重要的表,分别是TRACK和ALBUM。 enter image description here

(播放列表并不重要)。我想要做的是列出所有编辑了另一位艺术家的整个专辑的作曲家,即编辑同一专辑中所有曲目的作曲家。

例如: enter image description here

在此示例中,作曲家“a”编辑了来自album1的所有歌曲x1-x5。歌曲y1-y5有作曲家“d”和“t”,所以这不是我想要展示的。从我的样本我想得到这样的东西

enter image description here

更好地解释一下:我想展示所有编辑过一张专辑中所有歌曲的作曲家。也就是说,我必须从一张专辑中获取所有歌曲并比较它们是否都有相同的作曲家,我不要知道该怎么做。

到目前为止,我已经达到了这一点,所有的艺术家,专辑,曲目和作曲家都被展示出来..我没有再来了

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;

2 个答案:

答案 0 :(得分:1)

我认为这可以满足您的需求。我使用派生表来确定哪些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;

答案 1 :(得分:1)

  

我想展示所有编辑过一张专辑中所有歌曲的作曲家。也就是说,我必须从一张专辑中获取所有歌曲并比较它们是否都有相同的作曲家,

如果作曲家编辑了整张专辑的所有曲目,则意味着没有任何其他作曲家编辑过这张专辑。
对于给定的专辑和作曲家,请检查该专辑是否存在其他作曲家。后一种情况意味着,只有一位作曲家编辑过该专辑。

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
)