2012-01-01 23 views
3

私はsql-http://sqlzoo.netを実践する素晴らしいサイトを見つけました。私のSQLは非常に弱いので、私は練習問題をオンラインで作業して改善したいのです。しかし、私は解決できないこの1つの問題を抱えています。私に手を差し伸べてもらえますか?sqlzoo track join exercise

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)のtrifectaは素晴らしいと思います! –

+0

あなたの回答は以下の通りですが、投稿されたクエリには 'と'がありません。 – Ben

答えて

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

回答に感謝します。私はクエリを試みたが、まだ正しい答えを得ていない。しかし、とにかく再び返信いただきありがとうございます。本当に感謝しています。 :) –

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は通常、それぞれの単語によって指定されます。前の回答に示されているように、別々のアルバムで選択したいのですが、2つのテーブルが結合されたときにアルバムのタイトルが繰り返されるというデータベース記述の中で述べたように