小5聊sql server 分页和分组-row_number()和over()rank()和over()的小区别

Posted 小5聊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小5聊sql server 分页和分组-row_number()和over()rank()和over()的小区别相关的知识,希望对你有一定的参考价值。

在使用sql server数据库时,分页方式之一会常用到row_number结合over进行重新排序分页

如果需要根据班级分组,分别显示对应班级的排名,rank就是很好的函数

1、row_number()函数

1)为每个分组生成唯一序号,相同值,序号不对,可用于分页

2)函数“ROW_NUMBER”必须有 OVER 子句

row_number() over() as ‘自定义字段’

3)缺点

不适合多语句查询分页,因为这个是全表查询

错误写法:

select top 10 * 
from (
select row_number() 
over(order by t.create_time desc) as rowindex,t.* 
from (
        select * from domain_table a
        where 1=1
    ) t
) new_table
where rowindex>((1-1)*10) and rowindex<=1*10
order by new_table.create_time desc

正确写法

select top 10 *
from (select row_number()
over(order by create_time desc) as rownumber,*
from domain_table) temp_row
where rownumber>((1-1)*10);

2、over()函数

1)order by + 一般是时间字段或者排序字段,必填

2)函数“ROW_NUMBER”必须有包含 ORDER BY 的 OVER 子句

3、rank()函数

1)也是为每个分组生成唯一序号,相同值时,序号相同,可用于排行

2)多用于需要分组并且每个分组有各自从1开始的排序

以上是关于小5聊sql server 分页和分组-row_number()和over()rank()和over()的小区别的主要内容,如果未能解决你的问题,请参考以下文章

小5聊Sql Server基础之统计库龄语句,仅作为语句使用

小5聊Sql Server进阶之行数据转为列显示

SQL开发实战技巧系列(二十二):数仓报表场景☞ 从分析函数效率一定快吗聊一聊结果集分页和隔行抽样实现方式

带有分页和计数的 SQL Server 查询

SQL分页和HQL分页查询

带有分页和分组的 Django ListView