Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数group的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
例如需要查询员工信息中每个部门最早入职员工的个人信息
字段有:用户名name,日期start_date,工号emp_id,部门dept_id
1)聚合函数:select e.* from emp e, (select max(start_date)max_ start_date, dept_id from emp group by dept_id) emax where e.start_date= emax.max_start_date and e.dept_id = emax.dept_id
2)分析函数:select * from (select e.*,dense_rank()over(partition by code,name order by date) cnt from emp e) where cnt = 1
name |
start_date |
emp_id |
dept_id |
cnt |
li |
2010-09-01 |
0101 |
01 |
1 |
wang |
2010-09-01 |
0102 |
01 |
1 |
dd |
2011-09-01 |
0201 |
02 |
1 |
fff |
2012-09-01 |
0301 |
03 |
1 |
分析函数可以简化查询逻辑,省掉一部分代码。
注:时间上会稍微长一些,在数据库速度容许情况下,适合使用分析函数。
下面具体说一下Over函数。
①Over函数指明在那些字段上做分析,其内跟Partition by表示对数据进行分组。注意Partition by可以有多个字段。
例如row_number()over(partition by code,name order by date) cnt
就是将表中相同code,name的数据进行分组,并排序,根据每一组中日期进行序号标记
②Over函数可以和其它聚集函数、分析函数搭配,起到不同的作用。例如这里的SUM,还有诸如Rank,Dense_rank等。
排序函数row_number()、rank()和dense_rank()的区别是:
--row_number()函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增;
--rank()Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。是跳跃排序,有两个第二名时接下来就是第四名;
--dense_rank()Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。是连续排序,有两个第二名时仍然跟着第三名
假如客户就只需要指定数目的记录,如取最大一个值,那么采用row_number是最简单的,但有漏掉的记录的危险。
假如客户需要所有达到排名水平的记录,那么采用rank或dense_rank是不错的选择。至于选择哪一种则看客户的需要,选择dense_rank或得到最大的记录
注:排序时,oracle会将空值列为最大,用NULLS LAST/FIRST告诉Oracle让空值排名最后后第一
注意:分析函数允许你对一个数据集进排序和筛选,这是SQL从来不能实现的.除了最后的Order by子句之外,分析函数是在查询中执行的最后的操作集,这样的话,就不能直接在谓词中使用分析函数,即不能在上面使用where或having子句!!!
另外:分析函数不能用在exist中。
相关推荐
### Oracle分析函数详解 #### 一、Oracle分析函数概述 Oracle分析函数是在处理大量数据时极为有用的一套工具,主要用于在线分析处理(OLAP)场景。这类函数可以在多个级别上进行数据聚合,并支持复杂的排序、分组...
### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对分组数据执行复杂的计算,并且结果可以根据特定条件进行动态调整。这种灵活性使得Oracle分析函数在处理复杂的数据集时非常...
Oracle分析函数是数据库查询中非常强大的工具,它们用于处理复杂的报表和统计需求,特别是在在线分析处理(OLAP)环境中。分析函数与聚合函数的主要区别在于,聚合函数对每个组只返回一行结果,而分析函数则可以针对...
Oracle分析函数是数据库管理系统Oracle中的一个强大特性,它允许用户在SQL查询中执行复杂的分析操作。分析函数在处理报表和数据迁移任务时尤其有用,因为它们可以基于分组计算聚合值,并为每个分组返回多行,而不...
分析函数(Analytic Functions)是Oracle SQL中的高级特性,它们在数据集上执行计算,并返回基于分组或排序的数据结果。与聚合函数(如SUM, AVG, COUNT等)不同,分析函数可以在每个行级别上返回结果,而不只是返回...
### Oracle分析函数OVER及开窗函数详解 #### 一、概述 在Oracle数据库中,分析函数(Analytic Functions)是一种非常强大的工具,用于处理复杂的查询需求。这些函数可以在一组相关的行上执行计算,并且每行返回一个...
Oracle 分析函数(用法+实例) Oracle 分析函数是 Oracle 8.1.6 版本中引入的高级应用,属于 Oracle 的一大亮点。分析函数可以分为四大类:排名函数、聚合函数、行比较函数和统计函数。下面将对分析函数的原理、...
主要包括分析函数(OVER);分析函数2(Rank, Dense_rank, row_number);分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述 ROW_NUMBER () ...
Oracle 分析函数是一种强大的SQL工具,它允许你在处理数据时执行复杂的分析操作,而不像聚合...参考书籍如Tom Kyte的《Expert One-on-One》和Oracle 9i SQL Reference等,都是深入学习和理解Oracle分析函数的宝贵资源。
Oracle 分析函数是一种高级SQL功能,它允许在单个查询中对数据集进行复杂的分析,无需额外的编程或多次数据库交互。分析函数处理的结果通常基于数据的分组、排序或特定窗口,为统计汇总和复杂的数据分析提供了便利。...
Oracle 分析函数详解 Oracle 分析函数是 Oracle 数据库中的一种强大功能,能够帮助用户快速进行数据分析和处理。在本文中,我们将对 Oracle 分析函数进行详细的介绍,并对其各个函数进行解释。 一、总体介绍 ...
Oracle分析函数是数据库管理系统Oracle中一组强大的工具,用于处理集合数据,特别是在复杂的报表和数据分析场景中。它们允许用户在单个SQL查询中执行聚合操作,同时保持行的原始顺序,这是传统的GROUP BY函数无法...
### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它自Oracle 8.1.6版本开始引入,并在后续版本中不断完善和发展。这类函数的主要用途在于能够针对一组数据执行复杂的聚合计算,并且不同于...
Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析和报告的能力,提高了查询性能。以下是对Oracle分析...
Oracle分析函数是数据库管理系统Oracle中的一个重要特性,自8.1.6版本开始引入,它们用于执行基于组的聚合计算,并且为每个组返回多行结果,而不仅仅是单行。这使得分析函数在数据分析和报表生成方面非常有用,能够...
Oracle分析函数在数据分析、报表生成以及任何需要对大量数据进行聚合和排序的场景中都极其有用,尤其在商业智能和数据仓库环境中,它们是不可或缺的工具。通过熟练掌握这些函数,数据库管理员和开发人员可以更有效地...
ORACLE分析函数 ORACLE分析函数是数据库管理系统中的一种功能强大且灵活的分析工具,能够对数据进行复杂的分析和处理。通过使用分析函数,开发者可以更加方便地实现业务逻辑,提高查询效率和数据处理速度。 在本...
### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对分组数据执行复杂的计算,并且能够返回多个结果行。这与传统的聚合函数(如`SUM`、`COUNT`等)形成鲜明对比,后者通常只针对...
Oracle 分析函数、窗口函数和报表函数是数据库查询和数据分析中的关键工具,尤其在复杂的OLAP(在线分析处理)系统中发挥着重要作用。在Oracle数据库中,这些功能提供了对大量数据进行高效处理的能力,帮助用户生成...