`
azrael6619
  • 浏览: 579973 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

 oracle分析函数rank(),row_number(),lag()等的使用方法


 row_number() over (partition by col1 order by col2)

 表示根据col1分组,在分组内部根据 col2排序
 而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)

 

 rank() 类似,不过rank 排序的时候跟派名次一样,可以并列2个第一名之后 是第3名

 

 lag 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 null

 

 btw: expert one on one 上讲的最详细,还有很多相关特性,文档看起来比较费劲

 

 row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序)


rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)


dense_rank()是连续排序,有两个第二名时仍然跟着第三名。


相比之下row_number是没有重复值的


lag(arg1,arg2,arg3):


arg1是从其他行返回的表达式


arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。


arg3是在arg2表示的数目超出了分组的范围时返回的值。

 

以下是我多表查询时用到,因为有些记录的id是相同,而我只需要取出最后一条即可。

select * from (
select distinct bb01.abz001 abz001,bb01.aab004 aab004,bb96.abb531 abb531,
row_number() over(partition by bb01.abz001 order by bb96.abb531 desc) number1
from bb01 left join bb96 on bb96.Abz001 = bb01.Abz001
Where bb96.abb534='01')
where number1=1;

 

abz001是编号,abb531是顺序

注意:1.条件 bb96.abb534='01' 放在where 跟on后面是不同的,可以参考前面博客内容

         2.我给每个字段一个别名,因为刚开始写的时候没别名出错,不过后来去掉也不报错了,所以如果有些人写的时候字段无法识别是可以加个别名。

 

分享到:
评论

相关推荐

    oracle row_number用法

    ### Oracle Row_Number 函数详解 #### 一、Row_Number 基础概念 在Oracle数据库中,`ROW_NUMBER()`函数是一种窗口函数,主要用于为查询结果中的每一行分配一个唯一的序列号。这一特性使得它在处理分组数据时非常...

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

    在上述信息中,提到了几个关键的分析函数:RANK()、ROW_NUMBER()和LAG(),下面将详细阐述这些函数的使用方法和特点。 1. **ROW_NUMBER()** ROW_NUMBER()函数用于为每个分组内的行分配一个唯一的序列号,这个编号是...

    Oracle分析函数

    Oracle 分析函数中有两种窗口函数:RANGE WINDOW 和 ROW WINDOW。 2.1 RANGE WINDOW RANGE WINDOW 函数用于指定一个值域窗口,例如 RANGE N PRECEDING,表示当前行及之前 N 行的所有数据。 2.2 ROW WINDOW ROW ...

    ORACLE分析函数教程

    常见的等级函数包括`RANK()`, `DENSE_RANK()`, 和`ROW_NUMBER()`等。 - **RANK()**: 对每一行分配一个唯一的等级号。如果有两个或多个行具有相同的值,则它们将被分配相同的等级号,接下来的等级号将会跳过。 - *...

    oracle分析函数.doc

    假设我们有一个销售表,包含产品ID、销售日期和销售额,我们可以使用`ROW_NUMBER()`来为每条记录分配一个顺序编号,或者使用`SUM()`函数计算每个产品的累计销售额。 ```sql SELECT product_id, sale_date, sale_...

    oracle的分析函数汇总

    Rank 函数对数据进行排名,使用 Lag 和 Lead 函数对数据进行延迟和前导操作,使用 Sum 和 Avg 函数对数据进行汇总和平均计算,使用 Ratio_to_Report 函数对数据进行报表处理,使用 First 和 Last 函数对数据进行基数...

    ORACLE分析函数

    通过熟练掌握Oracle分析函数,特别是`RANK()`,`ROW_NUMBER()`和`LAG()`,以及如何有效地使用`OVER()`子句,我们可以更高效地处理和分析大型数据集,从而优化数据库查询和报表生成。在实际工作中,根据需求灵活运用...

    Oracle中的分析函数详解

    - `FUNCTION_NAME`:具体的分析函数,如RANK, LAG, LEAD, SUM等。 - `PARTITION BY`:可选,用于将数据集划分为不同的分区,每个分区内部独立进行计算。 - `ORDER BY`:可选,用于指定在每个分区内的行顺序。 - `...

    深入浅出Oracle分析函数

    Oracle中的分析函数主要包括RANK()、DENSE_RANK()、ROW_NUMBER()用于排名,LEAD()和LAG()用于获取当前行前后行的值,FIRST_VALUE()和LAST_VALUE()用于获取分区的第一行和最后一行的值,以及SUM()、AVG()、MIN()、MAX...

    ORACLE分析函数.pdf

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

    ORACLE_分析函数大全

    除了这些,Oracle分析函数还包括RANK、DENSE_RANK、ROW_NUMBER等排名函数,LEAD和LAG用于获取当前行之前或之后的值,FIRST_VALUE和LAST_VALUE则返回窗口内的第一个或最后一个值,以及NTILE用于将数据分桶等。...

    oracle分析函数学习

    Oracle分析函数是数据库查询中的重要工具,特别是在处理复杂的报表和数据分析任务时,它们能提供强大的功能,帮助开发者高效地处理大量数据。分析函数允许你在数据集上执行计算,同时考虑到行之间的关系,而不仅仅是...

    oracle 分析函数学习笔记

    Oracle的分析函数还包括`ROW_NUMBER`, `RANK`, `DENSE_RANK`用于行号分配,`LEAD`, `LAG`用于获取前后行数据,`FIRST_VALUE`, `LAST_VALUE`获取窗口范围内的第一个或最后一个值,以及`NTILE`进行分桶等。这些函数在...

    ORACLE分析函数大全

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

    Oracle 分析函数.doc

    在Oracle 8i版本之后引入,分析函数为处理大量数据提供了高效的方法,避免了过去需要自连接、子查询或存储过程的复杂性。 1. **自动汇总函数:ROLLUP 和 CUBE** - **ROLLUP** 函数用于生成层次化的汇总数据。它会...

    oracle分析函数over_及开窗函数.txt

    本文将详细介绍Oracle中的`OVER`子句以及几种常用的开窗函数,包括`ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`和`LAG()`等。 #### 二、基本概念 - **`OVER`子句**:`OVER`子句用于指定分析函数的作用范围,它可以...

    ORACLE 分析函数大全

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

    oracle分析函数全面解析

    窗口函数包括像`LEAD()`, `LAG()`, `CUME_DIST()`, `PERCENT_RANK()`等,它们在数据透视、趋势分析和预测中非常有用。 **4. 报表函数** 报表函数通常是分析函数的实用应用,例如计算累计销售额、同比增长率等。...

Global site tag (gtag.js) - Google Analytics