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
Dies ist ANSI SQL, also die gleiche Syntax. – sagi
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
Ich habe meine Frage bearbeitet . – mOna