【问题标题】:Is there a way to count and loop with plain SQL?有没有办法用纯 SQL 进行计数和循环?
【发布时间】:2019-02-13 19:37:38
【问题描述】:

我有以下表格:

专辑:

专辑 ID、专辑标题、专辑发布日期、专辑标签、专辑数字图片、专辑封面故事

专辑曲目:

trackIDalbumIDrecordingID、albumTrackNumber、cd


斜体 = 主键

粗体 = 外键


问题如下:

列出每张专辑中包含任何曲目的曲目总数。给 包含轨道总数的列一个合理的名称和使用 albumId 来识别每个总数。

我唯一的想法是遍历每个专辑 ID 并检查分配给它的曲目数量,但显然循环不是普通 SQL 中的事情?有没有办法使用纯 SQL 来做到这一点?

这只会检查为专辑 ID 1 分配了多少曲目,而不是检查所有专辑,我真的不知道如何在没有循环的情况下做到这一点。

SELECT COUNT(albumID)
FROM albumTrack
WHERE albumID = 1;

我正在使用 Oracle。

【问题讨论】:

  • 请分享一些示例数据和所需的输出。
  • 样本数据和所需输出:i.imgur.com/DFsxJBk.png
  • 这个问题是微不足道的。答案是每个 sql 教程。 (计算部门中的员工) rdbms 的类型在这里不相关。

标签: sql database oracle


【解决方案1】:

以下查询将为您提供每个专辑 ID 的曲目数量(如果有)。

SELECT albumID,count(trackID) as NumberOfTracks
FROM albumTrack
Group By albumID;

【讨论】:

    【解决方案2】:

    你可以试试:

    Select ab.albumID, 
        Count(Distinct trackID) As trackCount
    From album ab 
    Inner Join albumTrack at 
        on at.albumID = ab.albumID
    Group By ab.albumID;
    

    这将给出每张专辑的曲目数。

    【讨论】:

      【解决方案3】:

      问题询问每个专辑 ID 的计数。
      为此,仅在albumTrack 上进行选择并在albumID 上带有GROUP BY 就足够了。

      SELECT albumID, COUNT(*) AS TotalTracks
      FROM albumTrack
      GROUP BY albumID
      ORDER BY albumID
      

      但是如果albumTrack.albumID 可以为NULL,或者不是album.albumID 上的外键?
      那么“专辑”表上的INNER JOIN 仍应使用。
      确保它只计算“专辑”表中实际存在的专辑 ID。

      SELECT
       tracks.albumID, 
       COUNT(*) AS TotalTracks
      FROM albumTrack AS tracks
      JOIN album ON album.albumID = tracks.albumID
      GROUP BY tracks.albumID
      ORDER BY tracks.albumID
      

      如果您想显示每个专辑标题的计数:

      SELECT
       a.albumTitle, 
       COUNT(t.trackID) AS TotalTracks
      FROM album a
      JOIN albumTrack t ON t.albumID = a.albumID
      -- WHERE a.albumID = 1
      GROUP BY a.albumID, a.albumTitle
      ORDER BY a.albumTitle
      

      【讨论】:

        猜你喜欢
        • 2021-12-21
        • 1970-01-01
        • 2023-01-09
        • 1970-01-01
        • 2019-07-12
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        相关资源
        最近更新 更多