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

Obtenga un rango, basado en la puntuación, de una base de datos MySql desordenada cuando se le proporcione un nombre de usuario

Esto manejará los rangos que tengan la misma puntuación.

SELECT  d.*, c.ranks
FROM
        (
          SELECT    Score, @rank:[email protected]+1 Ranks
          FROM
                  (
                      SELECT  DISTINCT Score 
                      FROM    tableName a
                      ORDER   BY score DESC
                  ) t, (SELECT @rank:= 0) r
        ) c 
        INNER JOIN tableName d
            ON c.score = d.score
// WHERE   d.username = 'Helen'

por ejemplo

KEY     username    password    score   Ranks
1       Anna        123         5       3
2       Bobby       345         6       2
3       Helen       678         6       2
4       Jon         567         2       4
5       Arthur      ddd         8       1

para un mejor rendimiento, agregue un INDEX en la columna Score ,

ALTER TABLE tableName ADD INDEX (Score)