MySQL: SUM der jeweils besten 3
bearbeitet von Rolf BHallo Fabienne,
ja, das ist das "Ranking für Arme". Du zählst pro Sportler und Ergebnis, wieviele Ergebnisse gleich oder schlechter diesem Ergebnis sind. Der Count entspricht dann dem Rang.
Passe diese Query mal für deinen Bedarf an, so dass sie genau die Zeilen liefert, die Du erwartest, und dann legst Du einen SELECT drumherum, der pro Spieler-ID die Ergebnisse aufsummiert.
Man kann nämlich das Ergebnis einer Query immer als Eingabe eines FROM verwenden, man muss es nur in Klammern setzten und einen Aliasnamen (correlation name) vergeben.
~~~sql
SELECT bla, blub from hui WHERE dings=bums
~~~
kann so eingesetzt werden:
~~~sql
SELECT bla, SUM(blub)
FROM (SELECT bla, blub from hui WHERE dings=bums)
GROUP BY bla
~~~
Außer mit einem LEFT JOIN kann man diese Technik auch durch einen Subselect realisieren:
~~~sql
SELECT sportler_id,
einzelergebnis,
(select count(*) from ergebnisse f
where f.sportler_id=e.sportler_id
and f.einzelergebnis <= e.einzelergebnis) as rang
FROM ergebnisse e
~~~
Und da kannst Du dann den gruppierenden Select drumherumlegen und nur die Sätze mit Rang 1-3 betrachten.
Eine Lösung ohne diese Ranking-Technik gibt es meines Wissens nach erst am MySQL 8 mit der RANK() OVER PARTITION Funktion.
_Rolf_
--
sumpsi - posui - clusi
MySQL: SUM der jeweils besten 3
bearbeitet von Rolf BHallo Fabienne,
ja, das ist das "Ranking für Arme". Du zählst pro Sportler und Ergebnis, wieviele Ergebnisse gleich oder schlechter diesem Ergebnis sind. Der Count entspricht dann dem Rang.
Passe diese Query mal für deinen Bedarf an, so dass sie genau die Zeilen liefert, die Du erwartest, und dann legst Du einen SELECT drumherum, der pro Spieler-ID die Ergebnisse aufsummiert.
Man kann nämlich das Ergebnis einer Query immer als Eingabe eines FROM verwenden, man muss es nur in Klammern setzten und einen Aliasnamen (correlation name) vergeben.
~~~sql
SELECT bla, blub from hui WHERE dings=bums
~~~
kann so eingesetzt werden:
~~~sql
SELECT bla, SUM(blub)
FROM (SELECT bla, blub from hui WHERE dings=bums)
GROUP BY bla
~~~
_Rolf_
--
sumpsi - posui - clusi