sql >> Base de Datos >  >> RDS >> Mysql

MySQL:SELECCIONE un ganador, devolviendo su rango

Creo que esto le dará el resultado deseado. Tenga en cuenta que manejo correctamente los casos en los que el ganador objetivo está empatado por puntos con otro ganador. (Ambos obtienen la misma posición).

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

Editar :
Me gustaría "tapar" a Ignacio Vazquez-Abrams ' que, en varios sentidos, es mejor que la anterior.
Por ejemplo, permite listar todos (o varios) ganadores y su posición actual.
Otra ventaja es que permite expresar una condición más complicada para indicar que un jugador dado está por delante de otro (ver más abajo). Leyendo incrediman El comentario de que no habrá "empates" me incitó a investigar esto; la consulta se puede modificar ligeramente de la siguiente manera para manejar la situación en la que los jugadores tienen la misma cantidad de puntos (anteriormente, a dichos jugadores se les habría dado el mismo valor de Posición, ahora el valor de posición está más vinculado a sus valores de Inicio relativos).

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