2016-03-23 28 views
0

aşağıdaki MySQL tablo (gerçek tablo, aslında yaklaşık 2 milyon satır çok büyük) var: Ben istiyorum nemysql select sayım eğer 3'ten büyük

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

olduğunu için: her biri için Kullanıcı, kullanıcıların 3 farklı parçadan daha fazlasını dinledikleri sanatçıları seçerler (yani, aynı sanatçının 3 parçasını). Bunun nedeni, bu seçimi sanatçıların kullanıcı tercihleri ​​olarak düşünmem gerektiğinden, örneğin bir kullanıcının bir sanatçının yalnızca 1 veya iki parçasını dinlemesi durumunda, bunu "tercihler/beğeniler" olarak değerlendirmek istemiyorum. İşte yazdığım sorgu ama bu doğru olup olmadığından emin değilim:

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. Çoğalmış gibi görünseler bile tüm satırları geri vermem gerekiyor (aynı kullanıcı, aynı parça, aynı sanatçı), ancak gerçekte farklı zaman damgalarıyla ilişkilidir. Birisi, bu sorgunun doğru olup olmadığını anlamama yardımcı olursa memnun olurum. Ben Oracle bunu test

Teşekkür

cevap

0

belki MySQL biraz farklı ama sonraki sorgu için beni çalışma yaptı.

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

Bu, ANSI SQL'dir, yani, aynı sözdizimi. – sagi

+0

Cevabınız için teşekkürler, ancak tüm satırlara ihtiyacım var (örneğin, yineleme gibi görünen bazı satırlar var (aynı kullanıcı, aynı sanatçı, aynı parça), ancak farklı zaman damgaları ile ilgili. – mOna

+0

Sorumu düzenledim . – mOna