SQL Server 2005学习总结:排名函数
Transact-SQL提供了4个排名函数: RANK(),DENSE_RANK(),ROW_NUMBER(),NTILE(),下文是对这4个函数进行的解释。
--演示例题,建一个table
以下是我对4个排名函数的类比表格:
--演示例题,建一个table
| create table rankorder( orderid int, qty int ) go |
--插入数据
| insert rankorder values(30,10) insert rankorder values(10,10) insert rankorder values(80,10) insert rankorder values(40,10) insert rankorder values(30,15) insert rankorder values(30,20) insert rankorder values(22,20) insert rankorder values(21,20) insert rankorder values(10,30) insert rankorder values(30,30) insert rankorder values(40,40) go |
--查询出各类排名
| SELECT orderid,qty, ROW_NUMBER() OVER(ORDER BY qty) AS rownumber, RANK() OVER(ORDER BY qty) AS [rank], DENSE_RANK() OVER(ORDER BY qty) AS denserank , NTILE(3) OVER(ORDER BY qty) AS [NTILE] FROM rankorder ORDER BY qty |
--结果
--ROW_NUMBER()是按qty由小到大逐一排名,不并列,排名连续
--RANK()是按qty由小到大逐一排名,并列,排名不连续
--DENSE_RANK()是按qty由小到大逐一排名,并列,排名连续
--NTILE()是按qty由小到大分成3组逐一排名,并列,排名连续
| orderid qty rownumber rank denserank NTILE 30 10 1 1 1 1 10 10 2 1 1 1 80 10 3 1 1 1 40 10 4 1 1 1 30 15 5 5 2 2 30 20 6 6 3 2 22 20 7 6 3 2 21 20 8 6 3 2 10 30 9 9 4 3 30 30 10 9 4 3 40 40 11 11 5 3 |
排名连续性 排名并列性
RANK() 不一定连续 有并列
DENSE_RANK() 连续 有并列
ROW_NUMBER() 连续 无并列
NTILE() 连续 有并列
浙公网安备 33010602011771号