`
lycjt
  • 浏览: 32676 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle 中rownum row_number() over() 的对比

阅读更多
--创建表
create table T_NEWS
(
  ID      NUMBER,
  N_TYPE  VARCHAR2(20),
  N_TITLE VARCHAR2(30),
  N_COUNT NUMBER
)

--插入数据
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (1, 'IT', '爱it1', 100);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (2, '体育', '爱体育1', 10);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (3, '体育', '爱体育2', 30);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (4, 'IT', '爱it2', 300);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (5, 'IT', '爱it3', 200);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (6, '体育', '爱体育3', 20);
insert into T_NEWS (ID, N_TYPE, N_TITLE, N_COUNT)
values (7, '体育', '爱体育4', 60);
commit;


--分页 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;














分享到:
评论

相关推荐

    深入探讨:oracle中row_number() over()分析函数用法

    Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...

    oracle中rownum和row_number()

    row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与rownum的区别在于:使用rownum进行排序的...

    Oracle数据库rownum和row_number的不同点

    在Oracle数据库中,`ROWNUM` 和 `ROW_NUMBER()` 是两个不同的概念,它们在处理结果集的排序和分页方面有着显著的区别。 首先,`ROWNUM` 是Oracle数据库中的一个伪列,它在查询执行的过程中动态生成。当查询执行时,...

    Oracle row_number() over()解析函数高效实现分页

    Oracle数据库中的`row_number() over()`函数是一种窗口函数,它在处理数据分页时非常有用。这个函数可以为查询结果集中的每一行分配一个唯一的行号,这些行号基于一个指定的排序规则。在此场景中,我们将探讨如何...

    使用row_number()实现分页实例

    在其他数据库系统中,如Oracle,`ROW_NUMBER()`的使用方式类似,但语法细节可能有所不同。例如,在Oracle中,可以使用`ROWNUM`函数,但它有一些不同的行为和限制。 性能方面,`ROW_NUMBER()`通常比传统的`TOP`或`...

    各数据库分页语法支持

    Oracle 支持多种分页方式,包括三层嵌套分页、ROW_NUMBER() 函数分页及 ROWNUM 控制最大条数的方法。 1. **三层嵌套分页**: ```sql SELECT * FROM ( SELECT row_.*, ROWNUM as rownum FROM ( SELECT sid ...

    Oracle 存储过程分页

    总结,Oracle 存储过程中的分页实现有很多种方式,包括ROWNUM、ROW_NUMBER()、CTE、FETCH FIRST子句,以及JOIN和游标等。选择哪种方法取决于具体的需求,如数据库版本、性能需求、查询复杂性等因素。正确使用分页...

    oracle分析函数

    ### Oracle分析函数详解:row_number() over 在Oracle数据库中,分析函数(Analytic Functions)是一种强大而灵活的数据处理工具,它们能够在查询结果集中对每一行数据进行计算,而不像传统的聚合函数那样只返回...

    oracle 高效分页

    在Oracle中,`ROW_NUMBER()`和`ROWNUM`是实现分页查询的两种主要方式。其中,`ROW_NUMBER()`函数是在SQL标准中的窗口函数,它可以为每一行分配一个唯一的行号,而这个行号的顺序可以基于某一列的排序规则。`ROWNUM`...

    oracle select top的方法

    通过上述介绍,我们可以看出虽然Oracle不支持直接的`SELECT TOP`语法,但通过使用`ROWNUM`和`ROW_NUMBER()`窗口函数可以轻松地实现类似的功能。这两种方法各有优缺点,具体使用哪种取决于实际需求以及性能考量。例如...

    Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法

    Oracle数据库中的分析函数是SQL查询中的强大...总的来说,理解并熟练运用RANK()、ROW_NUMBER()和LAG()等分析函数,能帮助数据库管理员和开发人员更好地处理和分析Oracle数据库中的数据,提高数据处理的准确性和效率。

    一个Oracle分页的存储过程

    总的来说,Oracle分页的存储过程是解决大数据量查询的一个有效工具,通过封装ROWNUM或ROW_NUMBER()方法,可以灵活地在不同版本的Oracle数据库中实现高效的分页查询。在使用时,应结合具体的业务需求和数据库环境进行...

    oracle分页程序的实现

    在Oracle数据库中,常见的分页查询方法有ROWNUM和ROW_NUMBER()函数,以及使用子查询和连接操作来实现分页。 1. ROWNUM方法: ROWNUM是Oracle中的内置伪列,它会为每一行数据生成一个唯一的数字,从1开始递增。但...

    解析函数高效实现分页

    本文将详细介绍如何利用Oracle中的`ROW_NUMBER()`解析函数来实现高效的分页功能,并通过示例对比不同分页方法的优劣。 #### 传统分页方法的问题 1. **ROWNUM方法**: - **原理**:通过`ROWNUM`为结果集中的每一行...

    oracle分页查询

    常用的 Oracle 分页查询方法有三种:使用 ROWNUM、使用 ROW_NUMBER() 和使用子查询。 第一种方法:使用 ROWNUM Oracle 的 ROWNUM 函数可以用来实现分页查询。基本格式如下: ```sql SELECT * FROM (SELECT A.*,...

    Oracle分页

    在Oracle数据库中,实现分页查询主要有两种方法:ROWNUM和ROW_NUMBER()函数。 1. ROWNUM方法:这是Oracle早期版本中常用的分页方式。ROWNUM是在查询结果集返回之前生成的一个整数,表示行的顺序。例如,要获取第10...

Global site tag (gtag.js) - Google Analytics