Mysql
 sql >> Base de données >  >> RDS >> Mysql

Classer les utilisateurs dans mysql par leurs points

Ceci est juste un correctif de la solution de Gordon utilisant des variables. Le fait est que votre fonction de classement n'est pas la façon dont le classement devrait fonctionner. (l'étudiant 4 devrait être rang 4)

Démo SQL Fiddle Vous pouvez ajouter plus d'élèves pour améliorer les tests.

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;

SORTIE

| 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 |