2016-03-23 9 views
0

Ich habe folgende MySQL-Tabelle (die reale Tabelle tatsächlich sehr groß ist, etwa 2 Millionen Zeilen):mysql select count für jeden Benutzer, wenn mehr als 3

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

Was ich möchte ist: für jeden Benutzer, wählen Sie Künstler aus, denen Benutzer mehr als 3 verschiedene Titel angehört haben (dh 3 Titel desselben Künstlers). Dies liegt daran, dass ich diese Auswahl als Benutzereinstellungen für Künstler betrachten muss. Wenn also beispielsweise ein Benutzer nur ein oder zwei Tracks eines Künstlers angehört, möchte ich dies nicht als "Vorlieben/Likes" betrachten. Hier ist die Abfrage, die ich geschrieben habe, aber ich bin nicht sicher, ob dies richtig ist:

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. Ich muss alle Zeilen zurückgeben, auch wenn es sich um Duplikate handelt (gleicher Benutzer, gleicher Titel, gleicher Künstler), aber in Wirklichkeit sind sie mit verschiedenen Zeitstempeln verknüpft. Ich schätze es, wenn mir jemand hilft zu verstehen, ob diese Abfrage korrekt ist.

Dank

Antwort

0

ich es in Oracle getestet, so vielleicht ist MySQL ein wenig anders, aber die nächste Abfrage für mich getan hat Arbeit.

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

Dies ist ANSI SQL, also die gleiche Syntax. – sagi

+0

Danke für deine Antwort, aber ich brauche alle Zeilen (weil zB einige Zeilen Duplikate zu sein scheinen (gleicher Benutzer, gleicher Künstler, gleicher Titel), aber sie sind mit verschiedenen Zeitstempeln verbunden. – mOna

+0

Ich habe meine Frage bearbeitet . – mOna

Verwandte Themen