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

Clasifica a los usuarios en mysql por sus puntos

Esta es solo una solución de la solución de Gordon usando variables. La cuestión es que su función de rango no es la forma en que debería funcionar el rango. (el estudiante 4 debe estar en el rango 4)

Demostración de SQL Fiddle Puede agregar más estudiantes para mejorar las pruebas.

select er.*,
       (@rank := if(@points = points, 
                    @rank, 
                    if(@points := points,    
                       @rank + 1, 
                       @rank + 1                       
                      )
                   )                  
       ) as ranking
from students er cross join
     (select @rank := 0, @points := -1) params
order by points desc;

SALIDA

| id | points | ranking |
|----|--------|---------|
|  1 |     80 |       1 |
|  2 |     78 |       2 |
|  3 |     78 |       2 |
|  4 |     77 |       3 |
|  5 |     66 |       4 |
|  6 |     66 |       4 |
|  7 |     66 |       4 |
|  8 |     15 |       5 |