sql >> Databasteknik >  >> RDS >> Mysql

MySQL:VÄLJ ut en vinnare och ger tillbaka deras ranking

Jag tror att detta kommer att ge dig det önskade resultatet. Observera att i hanterar fall där den riktade vinnaren är oavgjord för poäng med en annan vinnare. (Båda får samma position).

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

Redigera :
Jag skulle vilja "plugga" Ignacio Vazquez-Abrams ' svar som på flera sätt är bättre än ovanstående.
Det tillåter till exempel att lista alla (eller flera) vinnare och deras nuvarande position.
En annan fördel är att det gör det möjligt att uttrycka ett mer komplicerat tillstånd för att indikera att en given spelare ligger före en annan (se nedan). Läser incrediman s kommentar om att det inte kommer att finnas "band" fick mig att undersöka detta; frågan kan modifieras något enligt följande för att hantera situationen när spelare har samma antal poäng (sådana spelare skulle tidigare ha fått samma positionsvärde, nu är positionsvärdet ytterligare kopplat till deras relativa startvärden).

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


  1. Polymorfism i SQL-databastabeller?

  2. Hur man bulkinfogar i mySql och node.js med mysljs

  3. Escapende et-tecken i SQL-sträng

  4. classNotFoundException vid laddning av JDBC-drivrutin