У меня есть таблица базы данных, в которой перечислены тысячи студентов с их оценками на экзамене.

Например

name    score
andy    50
brian   56
chris   65
david   56
eddie   71
fred    50
greg    40

Я хочу запустить запрос, чтобы получить список студентов, упорядоченных по баллам (легко), а также их положению в классе. Мне нужно учитывать совместные позиции.

Например, ученик с наивысшей оценкой занимает позицию 1, если два лучших ученика имеют одинаковую оценку, тогда они оба занимают позицию 1, а затем следующий лучший ученик должен иметь позицию 3.

Вот как я бы хотел, чтобы данные, перечисленные ранее, отображались:

name    score   position
eddie   71      1
chris   65      2
brian   56      3
david   56      3
andy    50      5    
fred    50      5
greg    40      7

Как я могу адаптировать этот запрос, чтобы указать точное положение?

select name, score, '?' as position from students order by score
1
Chris 14 Сен 2020 в 21:57

2 ответа

Лучший ответ

Вы ищете rank():

select s.*, rank() over (order by score desc) as position
from students;

Это доступно, начиная с MySQL 8.0.

1
Gordon Linoff 14 Сен 2020 в 18:58

Используйте этот запрос, если вы работаете с MSSQL2019

ВЫБЕРИТЕ имя, балл, РАНГ () ВЫШЕ (ПОКАЗАТЬ ПО УДАЛЕНИЮ) позиции ОТ балла

Название оценка позиция b 75 1 a 70 2 c 65 3 d 50 4 e 50 4 f 40 6

0
Dr.Nirmal lodhi 14 Сен 2020 в 19:21