【问题标题】:Complex sql select复杂的sql选择
【发布时间】:2013-04-03 03:00:41
【问题描述】:

我不知道如何制作这个 sql select 语句...这是我的表格:

我打开了请求所涉及的表

所以基本上I want to select the number of albums for each interpret. 我只是想不通......我目前在想我需要在专辑上做我的第一个选择:

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

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

【问题讨论】:

  • 从interpret.no_interpret的专辑组中选择interpret.no_interpret,count(*);
  • albuminterpret有什么关系?您能识别出PrimaryForeign 键吗?
  • 似乎解释通过 NO_Interpret 与 link_InterpretSong 相关,通过 No_Song 与 LInk_Interpret_song 相关;但我不明白 No_Album 与歌曲或解释有何关系。如果没有这些知识,我认为没有人可以提供帮助
  • 歌曲包含 no_album 作为外键

标签: sql oracle select oracle-sqldeveloper


【解决方案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;

现在,也就是说,如果您想要解释详细信息,请获取上述结果并将其加入解释表。我已经完成了不同的专辑计数和歌曲总数,作为 count() 与 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

【讨论】:

  • 是的,我从来没有意识到我没有将这首歌与专辑联系起来,但我总是理所当然地认为我在歌曲中拥有专辑的外键。我要解决这个问题并尝试您的解决方案。谢谢!
【解决方案2】:

这个问题是模棱两可的,因为没有清楚地表明这些表是如何相关的。给定关于这些关系的假设,您的查询可能会采用类似于以下形式的内容:

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

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多