Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:SELECIONE um Vencedor, retornando sua classificação


Eu acho que isso vai te dar o resultado desejado. Observe que i lida adequadamente com casos em que o vencedor visado está empatado em pontos com outro vencedor. (Ambos ficam na mesma posição).
SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')

Editar :
Gostaria de "plugar" Ignacio Vazquez-Abrams ' que, em vários aspectos, é melhor que o anterior.
Por exemplo, permite listar todos (ou vários) vencedores e sua posição atual.
Outra vantagem é que permite expressar uma condição mais complicada para indicar que um determinado jogador está à frente de outro (veja abaixo). Lendo incrediman o comentário de que não haverá "laços" me levou a investigar isso; a consulta pode ser ligeiramente modificada como segue para lidar com a situação quando os jogadores têm o mesmo número de pontos (tais jogadores anteriormente teriam recebido o mesmo valor de Posição, agora o valor de posição está ainda mais vinculado aos seus valores de Início 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