`

oracle 分析函数的使用

 
阅读更多

1.rownum与rowid

   rownum :行数/行号.

   在查询语句中之使用于<,<=

 

   rowid:编码/编号/唯一识别号.

   他是类似“AAAR8gAAEAAAAErAAK”的编号,是没有先后顺序的,也就是说他和数据入库时间没有    任何关系,打个比方:他就像磁盘、内存存储数据用的是16进制的地址一样。

 

   他们都是伪列,可以理解成表中的一个列只是他们并不是你创建的。同样是伪列区别是什么呢?

 

   rowid是你录入数据时有数据库自动为这条记录添加的唯一的18位编号是一个物理编号用于找到这条记录(顺便说一句这也是为什么数据优调的时候强调尽量使用rowid的原因),他是不会随着查询而改变的 除非在表发生移动(比如表空间变化,数据导入/导出以后),才会发生变化。

 

   rownum是根据sql查询后得到的结果自动加上去的,但是他却不受到sql中order by排序的影响,因为他和rowid的顺序一样是系统按照记录插入时的顺序给记录排的号(顺序的、无跳跃)。 但是如果你想让rownum和order by一样的顺序 那么可以使用子查询,形如:

 

select rownum,t.* from (select * from 表空间名 order by 字段名) t  
  

 这样的话rownum就是根据该字段进行排序的编号了,为什么会这样呢,本人理解:rownum是根据表记录输出的行号,与筛选语句、排序语句都无关所以当用子查询时等于生成了一个表于是就按照这张表从1开始排序了。 同样,也可以用下面要提得到的分析函数中的row_number() over(order by 需要排序的字段名)。

 

2.分析函数row_number()、rank()、dense_rank()

   建立测试数据:

 

create table test_20120213(
id number primary key,
name varchar2(30),
value number
);

insert into test_20120213 values (1,'a1',1) ;
insert into test_20120213 values (2,'a1',1) ;
insert into test_20120213 values (3,'a2',2);
insert into test_20120213 values (4,'a3',3);
insert into test_20120213 values (5,'a4',4);
insert into test_20120213 values (6,'a4',5);
insert into test_20120213 values (7,'a5',6);
insert into test_20120213 values (8,'a1',2);
 

 

ROW_NUMBER(): 

Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。 row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序),因为row_number()是分析函数而rownum是伪列所以row_number()一定要over而rownum不能over。



RANK():
Rank函数返回一个唯一的值,除非遇到相同的数据,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)。


DENSE_RANK():
Dense_rank函数返回一个唯一的值,除非当碰到相同数据,此时所有相同数据的排名都是一样的。
dense_rank()是连续排序,有两个第二名时仍然跟着第三名。他和row_number的区别在于row_number是没有重复值的。


例子:

select id,name,row_number() over (partition by name order by value) row_number,
               rank() over (partition by name order by value)  rank,
               DENSE_RANK() over (partition by name order by value) DENSE_RANK
from test_20120213
 

结果:

id   name   row     rank   dense_rank

1 a1 1 1 1

2 a1 2 1 1

8 a1 3 3 2

3 a2 1 1 1

4 a3 1 1 1

5 a4 1 1 1

6 a4 2 2 2

7 a5 1 1 1


 


 



分享到:
评论

相关推荐

    Oracle分析函数使用总结

    Oracle分析函数使用总结Oracle分析函数使用总结Oracle分析函数使用总结Oracle分析函数使用总结

    Oracle 分析函数使用介绍

    在本文中,我们将深入探讨Oracle分析函数的使用方法,以及它们如何帮助我们进行数据统计和分析。 1. **窗口函数概念** 分析函数也被称为窗口函数,因为它们在数据集的一个“窗口”或分区上操作,这个窗口可以包含...

    ORACLE分析函数教程

    ### Oracle分析函数详解 #### 一、Oracle分析函数概述 Oracle分析函数是在处理大量数据时极为有用的一套工具,主要用于在线分析处理(OLAP)场景。这类函数可以在多个级别上进行数据聚合,并支持复杂的排序、分组...

    oracle分析函数(用法+实例)

    Oracle 分析函数(用法+实例) Oracle 分析函数是 Oracle 8.1.6 版本中引入的高级应用,属于 Oracle 的一大亮点。分析函数可以分为四大类:排名函数、聚合函数、行比较函数和统计函数。下面将对分析函数的原理、...

    Oracle分析函数使用总结[定义].pdf

    Oracle分析函数是数据库查询中非常强大的工具,它们用于在数据集上执行聚合操作,并返回每个行的上下文信息。在Oracle数据库中,分析函数能够帮助我们处理复杂的分组和排序需求,尤其在报告和数据分析中非常有用。...

    Oracle中的分析函数详解

    其中,Oracle的分析函数是其强大的特性之一,它允许用户在单个SQL查询中执行复杂的分析操作,而无需使用子查询或者自连接。这篇文档将深入探讨Oracle中的分析函数,帮助你更好地理解和利用这一功能。 一、什么是...

    Oracle分析函数使用的总结.doc

    Oracle分析函数是数据库查询中强大的工具,它们允许对数据集进行复杂的聚合操作,提供更深入的洞察力。本文将详细介绍Oracle分析函数中的评级函数,包括RANK()、DENSE_RANK()、CUME_DIST()、PERCENT_RANK()和NTILE()...

    oracle分析函数文档

    ### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对分组数据执行复杂的计算,并且结果可以根据特定条件进行动态调整。这种灵活性使得Oracle分析函数在处理复杂的数据集时非常...

    ORACLE分析函数大全

    Oracle分析函数是数据库管理系统Oracle中的一个强大特性,它允许用户在SQL查询中执行复杂的分析操作。分析函数在处理报表和数据迁移任务时尤其有用,因为它们可以基于分组计算聚合值,并为每个分组返回多行,而不...

    ORACLE 分析函数大全

    Oracle 分析函数是一种强大的SQL工具,它允许你在处理数据时执行复杂的分析操作,而不像聚合...参考书籍如Tom Kyte的《Expert One-on-One》和Oracle 9i SQL Reference等,都是深入学习和理解Oracle分析函数的宝贵资源。

    oracle 分析函数学习笔记

    在描述中提到的场景中,有几种不同的方法可以实现数据统计,包括通过程序处理、使用临时表和包、标准SQL的UNION以及Oracle特有的分析函数。每种方法都有其优缺点。例如,程序处理方法与数据库无关,但增加了开发工作...

    Oracle分析函数

    Oracle 分析函数详解 Oracle 分析函数是 Oracle 数据库中的一种强大功能,能够帮助用户快速进行数据分析和处理。在本文中,我们将对 Oracle 分析函数进行详细的介绍,并对其各个函数进行解释。 一、总体介绍 ...

    ORACLE分析函数.pdf

    Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析和报告的能力,提高了查询性能。以下是对Oracle分析...

    oracle 分析函数

    oracle 分析函数 开发必备 数据库开发工程师

    oracle分析函数大全

    ### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它自Oracle 8.1.6版本开始引入,并在后续版本中不断完善和发展。这类函数的主要用途在于能够针对一组数据执行复杂的聚合计算,并且不同于...

    oracle分析函数.doc

    Oracle分析函数是数据库管理系统Oracle中一组强大的工具,用于处理集合数据,特别是在复杂的报表和数据分析场景中。它们允许用户在单个SQL查询中执行聚合操作,同时保持行的原始顺序,这是传统的GROUP BY函数无法...

    Oracle分析函数.doc

    Oracle分析函数是数据库管理系统Oracle中的一种高级特性,用于处理和分析数据集,提供了一种高效的方式来执行聚合操作,而无需多次查询数据库。分析函数能够直接在单次查询中完成复杂的数据计算,包括排序、分组、...

    ORACLE分析函数.ppt

    ORACLE分析函数 ORACLE分析函数是数据库管理系统中的一种功能强大且灵活的分析工具,能够对数据进行复杂的分析和处理。通过使用分析函数,开发者可以更加方便地实现业务逻辑,提高查询效率和数据处理速度。 在本...

Global site tag (gtag.js) - Google Analytics