2016-03-23 18 views
0

もし私が(実際のテーブルには、実際には約2万行は非常に巨大である)は、次のMySQLのテーブルを持っている:mysqlの選択数を上回る3

---------------------------- 
userId | artistId | trackId 
---------------------------- 
user1 | artist1 | track1 
-------|----------|-------- 
user1 | artist1 | track1 
-------|----------|-------- 
user1 | artist1 | track1 
-------|----------|-------- 
user2 | artist1 | track1 
-------|----------|-------- 
user2 | artist2 | track2 
-------|----------|-------- 
user2 | artist2 | track2 
-------|----------|-------- 
.... | .... | .... 

私がしたいこと:それぞれのためにユーザは、3つ以上の異なるトラック(すなわち、同じアーティストの3つのトラック)をユーザが聴いたアーティストを選択する。これは、この選択をアーティストのユーザーの好みとして考慮する必要があるためです。たとえば、ユーザーがアーティストの1〜2つのトラックだけを聞いた場合、私はそれを「好み/好み」と見なしたくありません。 は、ここで私が書いたクエリですが、私はこれが正しいかどうかを確認していない:

select p.userId, p.artistId, p.trackId 
from lastfm_part2 p 
join 
(select userId, artistId, trackId 
from lastfm_part2 
group by userId, artistId, trackId 
having count(trackId) > 3) as m 
on m.userId = p.userId and m.artistId = p.artistId and p.trackID = m.trackId 

PS。重複しているように見えるかもしれませんが(同じユーザー、同じトラック、同じアーティスト)、すべての行を返す必要がありますが、実際には異なるタイムスタンプに関連しています。 このクエリが正しいかどうかわかるように助けてくれてありがとう。私は、Oracleでそれをテスト

おかげ

答えて

0

はので、多分MySQLは少し異なりますが、次のクエリは私のために仕事をしました。

SELECT p.userId, p.artistId, COUNT(DISTINCT p.trackId) 
FROM lastfm_part2 
group by userId, artistId 
having count(DISTINCT p.trackId) > 3; 
+0

これはANSI SQLなので、同じ構文です。 – sagi

+0

回答ありがとうございますが、すべての行が必要です(同じユーザー、同じアーティスト、同じトラックのように見える行がいくつかありますが、異なるタイムスタンプに関連しています) – mOna

+0

私は自分の質問を編集しました。 – mOna

関連する問題