Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ranking użytkowników w mysql według ich punktów

To tylko poprawka rozwiązania Gordona przy użyciu zmiennych. Rzecz w tym, że funkcja rangi nie powinna działać w taki sposób, w jaki powinien działać. (uczeń 4 powinien mieć stopień 4)

Pokaz SQL Fiddle Możesz dodać więcej uczniów, aby ulepszyć testy.

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;

WYJŚCIE

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wiele instrukcji INSERT mysql w jednym zapytaniu php

  2. Wynikiem podzapytania Mysql jest klauzula where

  3. Po aktualizacji zduplikowanego klucza — wiele kolumn

  4. XAMPP/MySQL:nie można otworzyć pliku obszaru tabel z pojedynczą tabelą .\mysql\innodb_index_stats.ibd po ponownym uruchomieniu MySQL

  5. Hibernacja nie przestrzega pola klucza podstawowego auto_increment MySQL