Есть ли способ считать и цикл с простым SQL? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующие таблицы:

album:

albumID , albumTitle, albumReleaseDate, albumLabel, albumDigitalImg, albumCoverStory

albumTrack:

trackID , albumID , запись ID , albumTrackNumber, cd


курсив = первичный ключ

полужирный = внешний ключ


Вопрос заключается в следующем:

Перечислите общее количество треков в каждом альбоме, в котором они есть.Дайте столбцу, содержащему общее количество треков, разумное имя и используйте идентификатор альбома для идентификации каждого итога.

Моя единственная идея - перебирать каждый идентификатор альбома и проверять, сколько треков ему назначено, но очевидноциклы не вещь в простом SQL?Есть ли способ сделать это с помощью обычного SQL?

Это только проверяет, сколько треков назначено для albumID 1, а не для всех альбомов, и я действительно растерялся относительно того, как я мог бы сделать это без цикла.

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

Я использую Oracle.

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Вопрос требует подсчета для идентификатора альбома.
Для этого достаточно выбрать только параметр albumTrack с GROUP BY для идентификатора альбома.

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

Но если albumTrack.albumID может иметь значение NULL или не является внешним ключом для album.albumID?
Тогда все равно следует использовать INNER JOIN в таблице "album".
Чтобы убедиться, что он учитывает только те идентификаторы альбома, которые действительно существуют в таблице «альбом».

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

И если вы хотите показать количество для каждого альбомаTitle:

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
0 голосов
/ 13 февраля 2019

Вы можете попробовать:

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

Это даст количество треков для каждого альбома.

0 голосов
/ 13 февраля 2019

В приведенном ниже запросе будет указано количество дорожек для каждого идентификатора альбома, если таковые имеются.

SELECT albumID,count(trackID) as NumberOfTracks
FROM albumTrack
Group By albumID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...