SQL2005利用ROW_NUMBER() OVER实现分页功能(sqlsugar 分页)没想到

随心笔谈9个月前发布 admin
206 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了如何在MySQL中使用`ROW_NUMBER() OVER`函数实现分页和排名功能。首先,文章通过初始化一个员工数据表,展示了如何根据部门分组(`deptid`),并按照工资(`salary`)降序排列显示每个部门的工资等级。通过使用以下SQL语句,可以实现按部门内部排序并生成排名: ```sqlSELECT Row_Number() OVER (ORDER BY salary desc) rank, * FROM employee;``` 文章还详细说明了如何通过分页实现对结果集的分页展示。例如,每页显示5条记录时,可以通过以下SQL语句实现: - 第一页:`SELECT * FROM (SELECT Row_Number() OVER (ORDER BY salary desc) rank, * FROM employee) as NewTable WHERE rank BETWEEN 1 AND 5;`- 第二页:`SELECT * FROM (SELECT Row_Number() OVER (ORDER BY salary desc) rank, * FROM employee) as NewTable WHERE rank BETWEEN 6 AND 10;` 文章还提到了分页实现的关键点,包括如何根据分组结果生成分页索引(`rank`),以及如何通过`WHERE`子句限制每页显示的记录数量。分页功能不仅适用于单表查询,也可以扩展到多表查询。 (关键词:ROW_NUMBER() OVER、分页、部门分组、工资排序、MINITABLE)



1.首先介绍ROW_NUMBER() OVER的基本用法

2.看一下实例数据

初始化数据

create table employee (empid int ,deptid int ,salary decimal(10,2))

insert into employee values(1,10,5500.00)

insert into employee values(2,10,4500.00)

insert into employee values(3,20,1900.00)

insert into employee values(4,20,4800.00)

insert into employee values(5,40,6500.00)

insert into employee values(6,40,14500.00)

insert into employee values(7,40,44500.00)

insert into employee values(8,50,6500.00)

insert into employee values(9,50,7500.00)

数据结果显示

根据部门分组(deptid),显示每个部门的工资(salary)等级

这是想要得到的结果第二列根据部门进行分组,第三列工资由高到低,rank进行部门内部的排列

3.简单分页实现

SELECT  Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee

根据上面1,2两点我们可以看出这个SQL只是按照工资降序排序后,并没有通过PARTITION BY COLUMN进行分区(分组),然后通过row_number()从1开始,为每一条分组记录返回一个数字。结果如下

将上面SQL返回的结果集当作一个数据表

(SELECT  Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee)as NewTable

假如我们每页5条记录,

那么第一页显示select * from (SELECT  Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee ) as NewTable where rank between 1 and 5

第二页为select * from (SELECT  Row_Number() OVER (ORDER BY salary desc) rank,* FROM employee ) as NewTable where rank between 6 and 10

当然我们第二页这里只有4条记录。

分页就这样实现了,对于多表查询进行分页也是同样的道理。

您可能感兴趣的文章:sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)一个基于ROW_NUMBER()的通用分页存储过程代码sqlserver2005使用row_number() over分页的实现方法Oracle row_number() over()解析函数高效实现分页C#拼接SQL语句 用ROW_NUMBER实现的高效分页排序高效的SQLSERVER分页查询(推荐)解析数据库分页的两种方法对比(row_number()over()和top的对比)使用row_number()实现分页实例SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同SQL Server使用row_number分页的实现方法

© 版权声明

相关文章