有没有一种方法可以计数和循环使用普通SQL?

时间:2019-02-13 06:21:43

标签: sql database oracle

我有下表:

相册:

相册ID ,albumTitle,albumReleaseDate,albumLabel,albumDigitalImg,albumCoverStory

专辑跟踪:

trackID 专辑ID recordingID ,albumTrackNumber,cd


斜体 =主键

粗体 =外键


问题如下:

  

列出每个专辑上有曲目的总数。给   包含曲目总数,合理名称和用途的列   albumId以标识每个总数。

我唯一的想法是遍历每个专辑ID并检查分配给它的曲目数量,但是显然,在普通SQL中循环不是一件事情吗?有什么方法可以使用普通SQL做到这一点?

这只会检查为专辑ID 1分配了多少曲目,而不是为所有专辑分配了曲目,我真的迷失了如何无循环执行此操作。

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

我正在使用Oracle。

3 个答案:

答案 0 :(得分:2)

以下查询将为您提供针对每个专辑ID的曲目数量。

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

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

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

答案 2 :(得分:1)

该问题要求每个专辑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
为了确保它仅计入“专辑”表中实际存在的AlbumID。

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