复杂的sql选择

时间:2013-04-11 02:53:59

标签: sql oracle select oracle-sqldeveloper

我无法弄清楚如何制作这个sql select语句......这是我的表格:

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;

并且有工作,但我不知道下一步该去哪里。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我可能会遗漏一些东西,但我没有看到你的歌曲表到专辑的直接关系......

我首先要将link_interpret_song表连接到歌曲表并获取不同专辑的数量。但是,我没有在歌曲表的字段列表中看到似乎是“No_Album”列。我只能猜测它与特定专辑相关联。我确实看过媒体,但对我来说,这就像是一种媒体类型(数字,下载,黑胶唱片,CD)与专辑表中明显的实际ID Key。

那就是说,我在想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;

现在,如果您想要解释详细信息,请采用上述结果并将其加入到解释表中。我已经完成了不同的专辑数量和歌曲总数,这只是count()vs count(distinct)上下文的一个例子......比如

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