WEB开发网
开发学院数据库MSSQL Server SQL Server2005杂谈(3):四个排名函数(row_num... 阅读

SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较

 2009-02-06 10:20:49 来源:WEB开发网   
核心提示: select*from(selecttop2*from(selecttop3*fromt_tableorderbyfield1)aorderbyfield1desc)borderbyfield1上面的SQL语句查询出来的结果如图5所示,图5这个查询结果除了没有序号列row_number,S

select*from(selecttop2*from(selecttop3*fromt_tableorderbyfield1)aorderbyfield1desc)borderbyfield1

上面的SQL语句查询出来的结果如图5所示。

SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较

图5

这个查询结果除了没有序号列row_number,其他的与图4所示的查询结果完全一样。

二、rank

rank函数考虑到了over子句中排序字段值相同的情况,为了更容易说明问题,在t_table表中再加一条记录,如图6所示。

SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较

图6

在图6所示的记录中后三条记录的field1字段值是相同的。如果使用rank函数来生成序号,这3条记录的序号是相同的,而第4条记录会根据当前的记录数生成序号,后面的记录依此类推,也就是说,在这个例子中,第4条记录的序号是4,而不是2。rank函数的使用方法与row_number函数完全相同,SQL语句如下:

selectrank()over(orderbyfield1),*fromt_tableorderbyfield1

上面的SQL语句的查询结果如图7所示。

SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较

图7

三、dense_rank

dense_rank函数的功能与rank函数类似,只是在生成序号时是连续的,而rank函数生成的序号有可能不连续。如上面的例子中如果使用dense_rank函数,第4条记录的序号应该是2,而不是4。如下面的SQL语句所示:

上一页  1 2 3 4 5  下一页

Tags:SQL Server 杂谈

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