ROW_NUMBER:返回结果集分区内行的序列号,每个分区的第一行从 1 开始。
RANK:返回结果集的分区内每行的排名。行的排名是相关行之前的排名数加一。
DENSE_RANK:返回结果集分区中行的排名,在排名中没有任何间断。行的排名等于所讨论行之前的所有排名数加一。
NTILE(integer_expression):将有序分区中的行分发到指定数目的组中。各个组有编号,编号从一开始。对于每一个行,NTILE 将返回此行所属的组的编号。
例子:
use demo
go
create table rankorder
(orderid int,
qty int
)
go
insert rankorder values(30001,10)
insert rankorder values(10001,10)
insert rankorder values(10006,10)
insert rankorder values(40005,10)
insert rankorder values(30003,15)
insert rankorder values(30004,20)
insert rankorder values(20002,20)
insert rankorder values(20001,20)
insert rankorder values(10005,30)
insert rankorder values(30007,30)
insert rankorder values(40001,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(2) over(order by qty) as ntile1
FROM rankorder
ORDER BY qty