Това е само поправка на решението на Гордън с помощта на променливи. Работата е там, че вашата функция за ранг не е начинът, по който рангът трябва да работи. (ученик 4 трябва да бъде ранг 4)
SQL Fiddle Демо Можете да добавите още ученик, за да подобрите тестването.
изберете er.*, (@rank :=if(@points =точки, @rank, if(@points :=точки, @rank + 1, @rank + 1 ) ) ) като класиране от студенти er кръстосано присъединяване (изберете @rank :=0, @points :=-1) подреждане на параметри по точки desc;
ИЗХОД
<предварителен код>| ID | точки | класиране ||----|--------|--------|| 1 | 80 | 1 || 2 | 78 | 2 || 3 | 78 | 2 || 4 | 77 | 3 || 5 | 66 | 4 || 6 | 66 | 4 || 7 | 66 | 4 || 8 | 15 | 5 |