2013-04-11 75 views
1

我无法弄清楚如何使这种SQL SELECT语句......这里是我的表:复杂的SQL选择

enter image description here

我打开该请求有关

所以基本上表I want to select the number of albums for each interpret. 我实在不明白它...我现在想,我需要做我的第一选择上张专辑一样:

select interpret.no_interpret, count(*) 
from album 
. 
. 
. 
group by interpret.no_interpret; 

从那里工作,但我不知道下一步该去哪里。

+0

选择interpret.no_interpret,从相册COUNT(*) 小组由interpret.no_interpret; – Fergus 2013-04-11 02:58:30

+0

“相册”和“解释”表**相关的**如何?你能否确定'Primary'和'Foreign'键? – 2013-04-11 03:01:24

+0

它通过NO_Interpret,通过No_Song解释关联到link_InterpretSong到LInk_Interpret_song;但我看不出No_Album与歌曲或诠释的关系。没有这些知识我不认为任何人都可以帮助 – xQbert 2013-04-11 03:01:38

回答

1

我可能失去了一些东西,但我没有看到从你的歌表专辑直接关系..

我首先将link_interpret_song表加入到歌曲表中,并获得不同专辑的数量。但是,我没有看到歌曲表的字段列表中看起来是“No_Album”列。我只能猜测它在那里与特定专辑相关联。我确实看到了媒体,但对我来说,这将像是一种媒体类型(数字,下载,乙烯基,CD),而对于专辑表来说,实际的ID键却很明显。

这就是说,我认为在SONG表中有这样的“No_Album”列。

select 
     LIS.No_Interpret, 
     COUNT(DISTINCT S.No_Album) 
    from 
     Link_Interpret_Song LIS 
     JOIN Song S 
      on LIS.No_Song = S.No_Song 
    group by 
     LIS.No_Interpret; 

现在,这就是说,如果你想要解释细节,可以把上面的结果加入到解释表中。我已经做了两个截然不同的专辑数量和歌曲总#就像数()与计数(不同的)情况下的一个例子...如

select 
     PreCounts.No_Interpret, 
     PreCounts.DistinctAlbums, 
     PreCounts.ActualSongs, 
     I.Name_Interpret, 
     I.First_Name, 
     I.Stage_Name 
    from 
     (select 
       LIS.No_Interpret, 
       COUNT(DISTINCT S.No_Album) as DistinctAlbums, 
       COUNT(*) as ActualSongs 
      from 
       Link_Interpret_Song LIS 
       JOIN Song S 
        on LIS.No_Song = S.No_Song 
      group by 
       LIS.No_Interpret) as PreCounts 
     JOIN Interpret I 
     ON PreCounts.No_Interpret = I.No_Interpret 
+0

是的,我从来没有意识到我没有把这首歌与这张专辑联系起来,但我总是认为我有一个前卫的关键歌曲中的专辑。我要解决这个问题并尝试你的解决方案。谢谢! – AntoineLev 2013-04-11 03:21:00

1

这个问题不明确,因为没有清楚地表明表格是如何关联的。鉴于对这些关系的假设,你的查询可能会采取类似以下形式的内容:

SELECT COUNT(distinct a.no_album) from album a, interpret i, song s 
where i.no_song=s.no_song 
and a.no_album=s.no_album GROUP BY i.no_interpret