#mysql #sql
#mysql #sql
Вопрос:
У меня есть таблица базы данных, в которой перечислены тысячи студентов с их оценкой на экзамене.
например
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:
Вы ищете rank()
:
select s.*, rank() over (order by score desc) as position
from students;
Это доступно, начиная с MySQL 8.0.
Комментарии:
1. Отлично — я сразу же приступлю к этому. Я ценю помощь.
Ответ №2:
используйте этот запрос, если вы работаете с MSSQL2019
SELECT
name,
score,
RANK () OVER (
ORDER BY score DESC
) position
FROM
score
name score position
b 75 1
a 70 2
c 65 3
d 50 4
e 50 4
f 40 6