SQL--Row_Number() over()的使用


1、语法

--over里面有两个参数
--partition by 用于分割区域   此参数可选
--order by 用于排序      此参数必有
row_number() over(partition by field,order by field desc) as num

2、例子

检索所有的数据

select * from  student

 2.1、只使用order by 不使用partition by 的情况

--根据分数进行排序作为一个新的索引   不会破坏主键
select name,gender,fenshu, row_number() over(order by fenshu desc) as num from dbo.PeopleInfo

 2.2、两个参数都使用 的情况

--先用partition by 根据gender将数据分为两个区域,然后在不同的区域根据分数进行分别排序
select name,gender,fenshu, row_number() over(partition by Gender order by fenshu desc) as num from dbo.PeopleInfo

 2.3、分别检索男女里面的最高分

--with  as  生成临时表
with temp as
(
select name,gender,fenshu, row_number() over(partition by Gender order by fenshu desc) as num from student
)
--检索两个区域新索引num=1的
select * from temp where num = 1

3、实现分页的功能

---子查询中根据score进行排序后按照顺序生成新的含有num field的新表
---在新的table检索前十条数据作为第一页的数据
select *
  from (select p.*,
               row_number() over(order by score, pageindex) as num
          from pagetable as p)
 where num between 0 and 10

 引用转载:https://www.cnblogs.com/shuangnet/archive/2013/04/12/3016898.html

SQL