WEB开发网
开发学院数据库MSSQL Server SQL 2005之四种排名函数 阅读

SQL 2005之四种排名函数

 2010-10-01 10:25:30 来源:WEB开发网   
核心提示: 得分最高的演讲者获得行号 1,得分最低的演讲者获得行号 11,SQL 2005之四种排名函数(3),ROW_NUMBER 总是按照请求的排序为不同的行生成不同的行号,请注意,如果值仍然相同,则使用最低词典顺序 speaker 名字来分出先后,如果在 OVER() 选项中指定的 ORDER BY

得分最高的演讲者获得行号 1,得分最低的演讲者获得行号 11。ROW_NUMBER 总是按照请求的排序为不同的行生成不同的行号。请注意,如果在 OVER() 选项中指定的 ORDER BY 列表不唯一,则结果是不确定的。这意味着该查询具有一个以上正确的结果;在该查询的不同调用中,可能获得不同的结果。例如,在我们的示例中,有三个不同的演讲者获得相同的最高得分 (9):Jessica、Ron 和 Suzanne。由于 SQL Server 必须为不同的演讲者分配不同的行号,因此您应当假设分别分配给 Jessica、Ron 和 Suzanne 的值 1、2 和 3 是按任意顺序分配给这些演讲者的。如果值 1、2 和 3 被分别分配给 Ron、Suzanne 和 Jessica,则结果应该同样正确。

如果您指定一个唯一的 ORDER BY 列表,则结果总是确定的。例如,假设在演讲者之间出现得分相同的情况时,您希望使用最高的 pctfilledevals 值来分出先后。如果值仍然相同,则使用最高的 numsessions 值来分出先后。最后,如果值仍然相同,则使用最低词典顺序 speaker 名字来分出先后。由于 ORDER BY 列表 — score、pctfilledevals、numsessions 和 speaker — 是唯一的,因此结果是确定的:

SELECT ROW_NUMBER() OVER(ORDER BY score DESC, pctfilledevals DESC,  numsessions DESC, speaker) AS rownum,   speaker, track, score, pctfilledevals, numsessions
FROM SpeakerStats

rownum speaker    track      score       pctfilledevals numsessions
------ ---------- ---------- ----------- -------------- -----------
1          Ron          Dev        9               30             3
2          Suzanne    DB         9               30             3
3          Jessica      Dev       9               19             1
4          Michele     Sys        8               31             4
5          Kathy       Sys        8               27             2
6          Mike         DB         8               20             3
7          Kevin        DB         7               25             4
8          Brian        Sys        7               22             3
9          Robert      Dev        6               28             2
10        Joe          Dev        6               20             2
11        Dan         Sys         3              22             4

上一页  1 2 3 4 5 6 7 8  下一页

Tags:SQL 排名 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接