我有一张这样的表:
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中执行此操作?
答案 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)
您需要编写一个能够计算给定学生和日期等级的函数。然后你可以“按日期排序,排名()”