我有下表:
相册:
相册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。
答案 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