Ранжирование студентов по классам в SQL - PullRequest
7 голосов
/ 12 августа 2009

У меня есть такая таблица:

Date       StudentName    Score

01.01.09   Alex           100
01.01.09   Tom            90
01.01.09   Sam            70
01.02.09   Alex           100
01.02.09   Tom            50
01.02.09   Sam            100

Мне нужно ранжировать студентов в таблице результатов по баллам в разные даты, например:

Date       Student         Rank

01.01.09   Alex             1
01.01.09   Tom              2
01.01.09   Sam              3
01.02.09   Alex             1
01.02.09   Sam              1
01.02.09   Tom              2

Как я могу сделать это в SQL?

Ответы [ 4 ]

28 голосов
/ 12 августа 2009

Вы хотите использовать функцию rank в T-SQL:

select
    date,
    student,
    rank() over (partition by date order by score desc) as rank
from
    grades
order by
    date, rank, student

Магия в предложении over. Видите, он разбивает эти ранжировки на date, а затем упорядочивает эти подмножества на score. Бриллиант, а?

1 голос
/ 12 августа 2009

Вы должны использовать ORDER BY:

SELECT * FROM Students ORDER BY Date,Rank

Это упорядочит данные по дате, а затем по рангу. Вы можете добавить столько полей, сколько хотите, при условии, что они сопоставимы (нельзя сравнивать BLOB-объекты или длинные текстовые поля).

Надеюсь, это поможет.

0 голосов
/ 12 августа 2009

Вам нужно написать функцию, которая будет вычислять ранг для данного учащегося и даты. Затем вы можете "ЗАКАЗАТЬ ПО Дате, Ранг ()"

0 голосов
/ 12 августа 2009

Знаете ли вы об использовании предложения ORDER BY?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...