Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:WÄHLEN Sie einen Gewinner aus und geben Sie seinen Rang zurück

Ich denke, das wird dir das gewünschte Ergebnis bringen. Beachten Sie, dass ich Fälle richtig handhabe, in denen der anvisierte Gewinner mit einem anderen Gewinner um Punkte punktgleich ist. (Beide erhalten die gleiche Position).

SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')

Bearbeiten :
Ich würde gerne Ignacio Vazquez-Abrams "einstecken". ' Antwort, die in mehrfacher Hinsicht besser ist als die obige.
So können beispielsweise alle (oder mehrere) Gewinner und ihre aktuelle Position aufgelistet werden.
Ein weiterer Vorteil ist, dass sie es ermöglicht, eine kompliziertere Bedingung auszudrücken um anzuzeigen, dass ein bestimmter Spieler vor einem anderen liegt (siehe unten). Lesen von incrediman Der Kommentar von , dass es keine "Krawatten" geben wird, veranlasste mich, dies zu prüfen; Die Abfrage kann wie folgt leicht modifiziert werden, um die Situation zu handhaben, in der Spieler die gleiche Anzahl von Punkten haben (diesen Spielern wurde früher der gleiche Positionswert gegeben, jetzt ist der Positionswert weiter an ihre relativen Startwerte gebunden).

SELECT w1.name, (
  SELECT COUNT(*)
  FROM winners AS w2
  WHERE (w2.points > w1.points) 
     OR (W2.points = W1.points AND W2.Start < W1.Start)  -- Extra cond. to avoid ties.
)+1 AS rank
FROM winners AS w1
-- WHERE W1.name = 'Sally'   -- optional where clause