sql 排名问题与分页

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

rank

dense_rank()实现排名

 select dense_rank() over(order by code  desc) as  rank,* from t_learn

dense_rank
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):其实不属于排名,而是基于属性的排序对记录进行分组编号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值