row_number()实现排名
row_number() 函数将查询结果进行排序,每一条数据会增加一个序号,序号递增不会出现重复
select *, row_number() over (order by id asc) as rank from t_learn --查询排名
go
row_number() 实现分页
--id降序排序获取第一页数据
select * from ( select *, row_number() over (order by id asc) as rank from t_learn )
as t where rank between 0 and 10 --查询第一页数据
go
--如果需要实现分页可定义动态sql 将页码@page 和 每页记录数 @pageSize 作为参数传递
declare @page int = 2
declare @pageSize int = 10
select * from ( select *, row_number() over (order by id asc) as rank from t_learn )
as t where rank between (@page - 1) * @pageSize + 1 and @page * @pageSize --查询第二页数据
go
rank()实现排名
select rank() over(order by code desc) as rank,* from t_learn
go
dense_rank()实现排名
select dense_rank() over(order by code desc) as rank,* from t_learn
ntile(10)将表中数据分为10组进行编号编号从1开始
select ntile(3) over (order by id asc) as groupid,* from t_learn --降序排序进行分组 分成三组
go
总结:
row_number():排名有序递增,适用与出现相同值不并列的情况。
rank():允许排名出现并列,但是排名序号出现跳跃情况。
dense_rank():允许排名出现并列,但是排名序号依然连续。
ntile(group):其实不属于排名,而是基于属性的排序对记录进行分组编号