Двойной подсчет количества треков - PullRequest
0 голосов
/ 19 ноября 2018

В альбоме Z отсутствуют треки, если таблица треков содержит меньше строк для A, чем количество треков для A, указанное в таблице Albums. Для каждого альбома без пропущенных треков найдите его общее количество секунд.

1 Ответ

0 голосов
/ 19 ноября 2018

Поскольку это упражнение, я не хочу полностью портить эффект обучения, просто давая вам окончательное решение. Я постараюсь направить вас туда.

Ваша проблема в предложении WHERE

WHERE albums.tracks >= tracks.number

Полагаю, вы намереваетесь выполнить требование & ldquo; для каждого альбома без пропущенных треков & hellip; & rdquo;.

Однако это не то, что делает условие; скорее это исключает треки, количество которых превышает количество треков альбома.

Вам нужно что-то вроде: & ldquo; где количество дорожек, связанных с альбомом, (больше или) равно количеству дорожек альбома & rdquo;.

Другими словами: WHERE count(tracks.*) >= albums.tracks. (Часть & ldquo; относящаяся к альбому & rdquo; реализуется условием объединения & mdash; исключаются треки, не относящиеся к альбому.)

См? Секрет часто заключается в том, чтобы просто перевести предложение на естественном языке в SQL.

Теперь мы столкнулись с проблемой, потому что у нас не может быть агрегатной функции, такой как count в предложении WHERE. Это потому, что WHERE обрабатывается до GROUP BY, где формируются группы.

К счастью для нас, существует своего рода & ldquo; WHERE clause & rdquo; это обрабатывается после группировки, и это HAVING.

Я оставляю вам остальное: ^)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...