Упражнение по присоединению к треку - PullRequest
3 голосов
/ 01 января 2012

Я нашел отличный сайт для практики sql - http://sqlzoo.net. мой sql очень слабый, поэтому я хочу улучшить его, работая над упражнениями онлайн. Но у меня есть одна проблема, которую я не могу решить. Можете ли вы дать мне руку.

3a. Найдите песни, которые появляются в более чем 2 альбомах. Включите счетчик количества раз, которое каждый появляется.

альбом (asin, название, исполнитель, цена, релиз, лейбл, ранг) трек (альбом, дск, посн, песня)

мой ответ неверен, когда я выполнил запрос.

 select a.song, count(a.song) from track a, track b
 where a.song = b.song
a.album != b.album
group by a.song
having count(a.song) > 2

спасибо заранее! : D

Ответы [ 3 ]

5 голосов
/ 23 апреля 2012

Я понимаю, что этот ответ может быть запоздалым, но для будущей ссылки на любого, кто использует этот учебник, ответ такой:

SELECT track.song, count(album.title)
FROM album INNER JOIN track ON (album.asin = track.album)
GROUP BY track.song
HAVING count(DISTINCT album.title) > 2

Некоторые вещи, которые я помогу вам в ваших поисках этого запроса, это то, чтоgroup by обычно определяется словом каждый.В соответствии с подсказкой, представленной в предыдущих ответах, которые вы хотите выбрать по отдельным альбомам, ПОЭТОМУ в описании базы данных упоминалось, что названия альбомов будут повторяться при объединении двух таблиц

1 голос
/ 01 января 2012

Ваш первоначальный ответ очень близок с предложениями GROUP BY и HAVING. Что не так, просто вам не нужно присоединяться к таблице треков против самого себя.

SELECT song, count(*)
FROM track
GROUP BY song
HAVING count(*) > 2

Другой ответ здесь использует COUNT (альбом DISTNCT), который необходим, только если песня может появиться в альбоме более одного раза.

0 голосов
/ 01 января 2012

Если они поддерживают вложенные запросы, вы можете:

Select song, count(*)
from(
    select a.song
    from track a
    group by a.song, a.album
    having count(*) > 1
)
group by song

или (лучший способ написать это), если они поддерживают этот синтаксис:

select a.song, count(distinct a.album)
from track a
group by a.song
having count(distinct a.album) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...