Oracle row_number() 高效分页

第一步:我先用rownum

 代码如下 复制代码

--分页 row_number,不是rownum
--根据n_count从大到小排列,每页3条
SELECT ROWNUM r,t.* FROM t_news t
WHERE ROWNUM<=3
ORDER BY t.n_count DESC
--问题:为什么order by以后,行号是乱的?
SELECT ROWNUM r,t.* FROM t_news t
--原因:先分配了行号,再根据n_count排序

--所以必须排序,再生成行号
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t

--分页
--err
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
WHERE r between 1 AND 3

--第1页
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
WHERE ROWNUM between 1 AND 3

--第2页
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
WHERE ROWNUM between 4 AND 6
--error: ROWNUM必须从1开始!
SELECT k.* FROM (
SELECT ROWNUM r,t.* FROM (
SELECT t.* FROM t_news t ORDER BY t.n_count DESC ) t
) k
WHERE r BETWEEN 4 AND 6

--麻烦,效率低!

*****第二步:我用row_number() over()函数

 代码如下 复制代码

select t2.* from
(select t.*,row_number()over(order by t.n_count desc) orderNumber from t_news t order by t.n_count desc)t2 where orderNumber between 1and 3;

*****************************************************************************************************************************************88
SELECT * FROM (
SELECT t.*,row_number() over(ORDER BY n_count DESC) r
FROM t_news t
ORDER BY t.n_count DESC
) t
WHERE r BETWEEN 4 AND 6

--通用语法: 解析函数() over(partition by 字段 order by 字段)

时间: 2024-12-10 11:10:31

Oracle row_number() 高效分页的相关文章

毕业项目求个c#高效分页的代码

问题描述 毕业项目求个c#高效分页的代码 最好不要存储过程,最好都是后台代码,网上都是存储过程,求大神给下 解决方案 网上查找了一下,还是有不少源代码可以参考的: C#高效分页代码(不用存储过程) C#高效分页代码(不用存储过程) 解决方案二: 存储过程比较简单嘛.代码中只要传个页码就搞定了,难道不好. 不要存储过程,那就直接写sql,或者用linq. 解决方案三: RowNumber写法,MSSQL2012新出了个offset写法,更简单 SELECT tblexamprovider.* FR

求oracle数据库的分页显示sql语句

问题描述 求oracle数据库的分页显示sql语句 求大神告知oracle数据库的分页显示sql语句,用rownum查不到 解决方案 http://www.cnblogs.com/xiaopang2010/archive/2012/07/23/2604880.htmlhttp://www.2cto.com/database/201304/206296.html 解决方案二: String querySql = ""; querySql += "select x.* from

GridView高效分页和搜索功能的实现代码_实用技巧

前言:         公司项目开发,上周的任务是做基础数据的管理.在Sharepoint2010里边内嵌asp.net的aspx页,遇到了各种各样奇葩的问题,因为之前对sharepoint只是有一些了解,但是没有设计到具体的编程工作,这一次算是初次接触吧.其中有一部分基础数据数据量很大,大致有十多万,因为是对基础数据的维护,所以还需要对数据进行列表展示,增删改查什么的,大家都知道Asp.net里边的GridView有自带的分页,但是,那个分页对于少量的数据还好,对于这种数十万的数据量而言,这种

几种SqlServer2005高效分页sql查询语句

几种sqlserver2005高效分页sql查询语句 top方案: sql codeselect top 10 * from table1 where id not in(select top 开始的位置 id from table1) max: sql codeselect top 10 * from table1 where id>(select max(id) from (select top 开始位置 id from table1order by id)tt) row: sql code

SQL2005 高效分页sql查询语句经典实例

方法一 SQL2005 高效分页sql查询语句经典实例 代码如下: select top 10 * from ( select top (@Page * 10) ROW_NUMBER() OVER (order by id) as RowNum, id, username from Guest where username = 'user' ) as T where RowNum > ((@Page - 1) * 10) 2 select * from ( select ROW_NUMBER()

使用AspNetPager高效分页..

第三方控件下载地址:http://www.webdiyer.com/Controls/AspNetPager/Downloads   实现最基本的高效分页 需要两个存储过程,第一个是获取全部数据数量的SQL,第二个是分页用的SQL语句了  先上SQL代码:分页用的存储过程    CREATE PROCEDURE Proc_GridView_Pager    @startIndex int,    @endIndex intASBEGIN    select * from (    select 

MySQL高效分页与分页优化分析

在Percona Performance Conference 2009大会上来自yahoo的Surat Singh Bhati (surat@yahoo-inc.com) 和 Rick James (rjames@yahoo-inc.com)给大家分享了MySQL高效分页的经验. 一.概述 常见分页方式 schema设计和常见的分页方式(偏移) 避免分页偏移过大的技巧 性能对比 重点 二.常见分页方式 三.前提 大记录表要高效分页 WHERE条件使用索引完成 WHERE条件和排序能够使用同个索

分页技术原理与实现之Java+Oracle代码实现分页(二)_java

紧接着上篇-分页技术原理与实现之分页的意义及方法(一) ,本篇继续分析分页技术.上篇讲的是分页技术的简单原理与介绍,这篇深入分析一下分页技术的代码实现. 上篇最后讲到了分页的最佳实现是在数据库层进行分页,而且不同的数据库有不同的分页实现,比如Oracle是用三层sql嵌套实现分页的.MySQL是用limit关键字实现的(上篇已讲到). 这篇以Java+Oracle为基础,讲解代码层的实现. 就如平时我们很在分页中看到的,分页的时候返回的不仅包括查询的结果集(List),而且还包括总的页数(pag

Linq配合AspNetPager高效分页方法

Linq配合AspNetPager高效分页方法   分页方式: 获取数据总条数: var Count = db.XXX.Count();   如果要是以往的写法还得写 select count(*) from XXXX; 还得调用SQLHelper.cs类里面的方法才行,现在就这么一句话就搞定--  汗额.. 再使用Skip()和Take()方法进行分页   说明:Skip()跳过集合的前n个元素:延迟.即我们跳过给定的数目返回后面的结果集. 说明:Take()获取集合的前n个元素:延迟.即只返