2012-01-01 58 views
3

我發現了一個很棒的網站來練習sql - http://sqlzoo.net。我的SQL很弱,這就是爲什麼我想通過在線練習來改善它。但我有這個我無法解決的問題。你能幫我一把嗎?sqlzoo加入練習

3a。查找出現在2個以上專輯中的歌曲。包括每次出現的次數。

專輯(ASIN,標題,藝術家,價格,發佈,標籤,排名) 曲目(專輯,DSK,posn處,歌曲)

我的答案是不正確的,我跑的查詢。

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

+0

是的sqlzoo很漂亮!我認爲jsfiddle,sqlzoo和codepad(鏈接http://rormd.com/linker/groups/32)的三連勝是非常棒的! – 2012-01-01 14:00:44

+0

你有你的答案在下面,但作爲一邊你錯過了'和'在您的發佈查詢... – Ben 2012-01-01 14:13:10

回答

0

如果他們支持嵌套的querys,您可以:

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 
+0

感謝球員的答覆。我已經嘗試了查詢,但仍然沒有得到正確的答案。但無論如何,再次感謝我的答覆,我真的很感激它。 :) – 2012-01-03 03:57:43

1

你原來的答案非常接近,與GROUP BY和HAVING子句一起使用。什麼是錯,只是你不需要加入跟蹤表本身。

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

這裏的另一個答案使用COUNT(DISTNCT專輯),這是必要的,如果只有一首歌能上一張專輯出現不止一次。

5

我知道這個答案可能會遲到,但供將來參考任何人承擔本教程的答案是這樣的

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 

有些事情,我幫你在你的追求這種查詢是什麼組by通常由每個詞指定。根據以前答案中提供的提示,您希望通過不同的專輯進行選擇,因爲它在數據庫描述中提到了在兩張表加入時會重複專輯標題