So, wie ich das sehe, soll die Tabelle weiterhin die Daten aller Benutzer enthalten, aber pro Benutzer maximal 5 Zeilen liefern
So ganz naiv habe ich das hier zusammengebastelt:
SELECT
A.Id,
A.benutzer,
A.summe
FROM
scratch.MyTable A
WHERE
A.Id IN (
SELECT
B.Id
FROM
scratch.MyTable B
WHERE
A.benutzer = B.benutzer
ORDER BY
B.summe DESC
LIMIT 5
)
Von der Logik her sollte es passen. Aber: MySQL kann kein LIMIT innerhalb von SubQueries -> Geht nicht!
„Einfach“ geht es nicht, aaaaber das Ganze spricht eher für analytische Funktionen.
Andrerseits könnte auch noch der Ansatz passen, mit Views bzw. Sub-Selects in der From-Klausel zu hantieren.
Aber da ich grad selber genug zu tun hab und das herumswitchen zwischen MySql und Oracle nicht gerade förderlich ist, lass ich dir die Lösung aufgrund der hingeworfenen Brocken selber überlegen.
Dann macht man halt einen inner join, da geht das. Oder eine temporäre Table in der man die ersten fünf Zeilen eines jeden Benutzers markiert, den Rest löscht und seine Abfrage dann darauf laufen lässt.
Ansonsten kann man sicher über ein richtiges Script nachdenken. Andererseits heißt es, daß die Daten eh aus einer komplexeren Abfrage stammen. Da wäre dann die Frage, ob man nicht dort bereits was drehen kann.