按SQL级别对学生进行排名

时间:2009-08-11 20:56:22

标签: sql sql-server tsql

我有一张这样的表:

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 个答案:

答案 0 :(得分:28)

您想在T-SQL中使用rank函数:

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 :(得分:1)

您应该使用ORDER BY

SELECT * FROM Students ORDER BY Date,Rank

这将按日期排序数据,然后排名。您可以根据需要添加任意数量的字段,只要它们具有可比性(您无法比较BLOB或长文本字段)。

希望有所帮助。

答案 2 :(得分:0)

您知道使用ORDER BY clause?

吗?

答案 3 :(得分:-1)

您需要编写一个能够计算给定学生和日期等级的函数。然后你可以“按日期排序,排名()”