Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:SELEZIONA un Vincitore, restituendo il suo grado

Penso che questo ti darà il risultato desiderato. Nota che gestisco correttamente i casi in cui il vincitore mirato è in parità per punti con un altro vincitore. (Entrambi ottengono la stessa posizione).

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

Modifica :
Vorrei "tappare" Ignacio Vazquez-Abrams ' risposta che, per molti versi, è migliore della precedente.
Per esempio, permette di elencare tutti (o più) vincitori e la loro posizione attuale.
Un altro vantaggio è che permette di esprimere una condizione più complicata per indicare che un dato giocatore è davanti a un altro (vedi sotto). Leggendo incrediman Il commento del fatto che non ci saranno "legami" mi ha spinto ad approfondire questo aspetto; la query può essere leggermente modificata come segue per gestire la situazione in cui i giocatori hanno lo stesso numero di punti (a questi giocatori in precedenza veniva assegnato lo stesso valore di Posizione, ora il valore di posizione è ulteriormente legato ai loro valori di Inizio relativi).

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