SQL—排名函数的应用

    SQL中的排名函数ROW_NUMBER()  RANK()  DENSE_RANK()  NTILE() 有很强大的功能,首次见到还是在做推荐的时候(使用NTILE将按大小排序后的数据,运用一种合理的机制划分为N个组,这实际上类似于一种打分),在此我们将这四种排序函数做一一介绍。


我们使用的原始数据 order表:

表结构和初始数据-晓菜鸟

(一)ROW_NUMBER:   按照提交时间的大小 给数据进行编号row_num

select ROW_NUMBER() OVER(order by [SubTime] desc) as row_num,* from [Order]
row_number查询结果-晓菜鸟


按提交时间编号后 再根据总价重新排序
select ROW_NUMBER() OVER(order by [SubTime] desc) as row_num,* from [Order] order by [TotalPrice] desc
over子句和sql语句中的order by 可完全不同-晓菜鸟

利用row_number可以实现web程序的分页
with orderSection as
(
    select ROW_NUMBER() OVER(order by [SubTime] desc) rownum,* from [Order]
)
select * from [orderSection] where rownum between 3 and 5 order by [SubTime] desc   选出提交时间位于3到5之间的  
利用row_number实现分页-晓菜鸟

注意上面跟下面这个的区别!
with orderSection as
(
    select ROW_NUMBER() OVER(order by [SubTime] desc) rownum,* from [Order]
)
select * from [orderSection] where rownum between 3 and 5 order by [TotalPrice] desc   选出提交时间3到5之间的,然后按照总价排序输出
over子句中的order by 与sql排序的order by 不一致-晓菜鸟

(二)RANK:
select RANK() OVER(order by [UserId]) as rank,* from [Order] 
使用rank函数排名-晓菜鸟

(三)DENSE_RANK:  行号连续
select DENSE_RANK() OVER(order by [UserId]) as den_rank,* from [Order]
使用dense_rank函数排名-晓菜鸟

(四)NTILE:将有序分区中的行分发到指定数目的组中 共N组  
select NTILE(4) OVER(order by [SubTime] desc) as ntile,* from [Order]
使用ntile排名函数-晓菜鸟
将排序后的六条数据,按照从大到小,合理的分配为四组。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值