Ich habe eine Tabelle, die folgende gefallen:mysql wählen, wenn Anzahl der Werte für jeden Benutzer von mehr als 1
----------------------------
userId | artistId | trackId
----------------------------
user1 | artist1 | track1
-------|----------|--------
user1 | artist1 | track1
-------|----------|--------
user1 | artist1 | track1
-------|----------|--------
user2 | artist1 | track1
-------|----------|--------
user2 | artist2 | track2
-------|----------|--------
user2 | artist2 | track2
-------|----------|--------
.... | .... | ....
Was muss ich tun ist: für jeden Benutzer, wählen Sie diese Spuren, dass er mehr hörte als einmal . So sollte beispielsweise in der obigen Tabelle für Benutzer 1 Spur 1 (alle 3 Zeilen) zurückgegeben werden und für Benutzer 2 nur Spur 2 (wiederum alle zwei Zeilen) zurückgegeben werden. Ich weiß, wie bestimmte Werte einer Spalte für jeden Benutzer, z. zu zählen einige Male Track1 und track2 jeder Benutzer zugehört, ich schreibe dies:
select userId,
sum(case when trackId = 'track1' then 1 else 0 end) as track1_count,
sum(case when trackId = 'track2' then 1 else 0 end) as track2_count
from populartracks_logs
group by userId
Aber da mein Tisch groß (etwa 5 Millionen Zeilen) mit vielen Spuren ist, weiß ich nicht, wie zu wählen (FOR JEDER BENUTZER) jene Tracks, die für diesen spezifischen Benutzer mehr als einmal wiederholt werden. Könnte mir bitte jemand helfen?
Danke,
'Gruppe von userid, trackid', dann. Die Summe/Fall-Geschäft ist sinnlos, wenn Sie tun könnten, was Sie wollen, indem Sie einfach eine andere Gruppenklausel hinzufügen. –