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 函数详解 #### 一、Row_Number 基础概念 在Oracle数据库中,`ROW_NUMBER()`函数是一种窗口函数,主要用于为查询结果中的每一行分配一个唯一的序列号。这一特性使得它在处理分组数据时非常...
在上述信息中,提到了几个关键的分析函数:RANK()、ROW_NUMBER()和LAG(),下面将详细阐述这些函数的使用方法和特点。 1. **ROW_NUMBER()** ROW_NUMBER()函数用于为每个分组内的行分配一个唯一的序列号,这个编号是...
Oracle 分析函数中有两种窗口函数:RANGE WINDOW 和 ROW WINDOW。 2.1 RANGE WINDOW RANGE WINDOW 函数用于指定一个值域窗口,例如 RANGE N PRECEDING,表示当前行及之前 N 行的所有数据。 2.2 ROW WINDOW ROW ...
常见的等级函数包括`RANK()`, `DENSE_RANK()`, 和`ROW_NUMBER()`等。 - **RANK()**: 对每一行分配一个唯一的等级号。如果有两个或多个行具有相同的值,则它们将被分配相同的等级号,接下来的等级号将会跳过。 - *...
假设我们有一个销售表,包含产品ID、销售日期和销售额,我们可以使用`ROW_NUMBER()`来为每条记录分配一个顺序编号,或者使用`SUM()`函数计算每个产品的累计销售额。 ```sql SELECT product_id, sale_date, sale_...
Rank 函数对数据进行排名,使用 Lag 和 Lead 函数对数据进行延迟和前导操作,使用 Sum 和 Avg 函数对数据进行汇总和平均计算,使用 Ratio_to_Report 函数对数据进行报表处理,使用 First 和 Last 函数对数据进行基数...
通过熟练掌握Oracle分析函数,特别是`RANK()`,`ROW_NUMBER()`和`LAG()`,以及如何有效地使用`OVER()`子句,我们可以更高效地处理和分析大型数据集,从而优化数据库查询和报表生成。在实际工作中,根据需求灵活运用...
- `FUNCTION_NAME`:具体的分析函数,如RANK, LAG, LEAD, SUM等。 - `PARTITION BY`:可选,用于将数据集划分为不同的分区,每个分区内部独立进行计算。 - `ORDER BY`:可选,用于指定在每个分区内的行顺序。 - `...
Oracle中的分析函数主要包括RANK()、DENSE_RANK()、ROW_NUMBER()用于排名,LEAD()和LAG()用于获取当前行前后行的值,FIRST_VALUE()和LAST_VALUE()用于获取分区的第一行和最后一行的值,以及SUM()、AVG()、MIN()、MAX...
Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它允许用户在单个查询中对一组行进行计算,而无需使用子查询或自连接。这些函数极大地增强了数据分析和报告的能力,提高了查询性能。以下是对Oracle分析...
除了这些,Oracle分析函数还包括RANK、DENSE_RANK、ROW_NUMBER等排名函数,LEAD和LAG用于获取当前行之前或之后的值,FIRST_VALUE和LAST_VALUE则返回窗口内的第一个或最后一个值,以及NTILE用于将数据分桶等。...
Oracle分析函数是数据库查询中的重要工具,特别是在处理复杂的报表和数据分析任务时,它们能提供强大的功能,帮助开发者高效地处理大量数据。分析函数允许你在数据集上执行计算,同时考虑到行之间的关系,而不仅仅是...
Oracle的分析函数还包括`ROW_NUMBER`, `RANK`, `DENSE_RANK`用于行号分配,`LEAD`, `LAG`用于获取前后行数据,`FIRST_VALUE`, `LAST_VALUE`获取窗口范围内的第一个或最后一个值,以及`NTILE`进行分桶等。这些函数在...
Oracle分析函数是数据库管理系统Oracle中的一个强大特性,它允许用户在SQL查询中执行复杂的分析操作。分析函数在处理报表和数据迁移任务时尤其有用,因为它们可以基于分组计算聚合值,并为每个分组返回多行,而不...
在Oracle 8i版本之后引入,分析函数为处理大量数据提供了高效的方法,避免了过去需要自连接、子查询或存储过程的复杂性。 1. **自动汇总函数:ROLLUP 和 CUBE** - **ROLLUP** 函数用于生成层次化的汇总数据。它会...
本文将详细介绍Oracle中的`OVER`子句以及几种常用的开窗函数,包括`ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`和`LAG()`等。 #### 二、基本概念 - **`OVER`子句**:`OVER`子句用于指定分析函数的作用范围,它可以...
Oracle 分析函数是一种强大的SQL工具,它允许你在处理数据时执行复杂的分析操作,而不像聚合...参考书籍如Tom Kyte的《Expert One-on-One》和Oracle 9i SQL Reference等,都是深入学习和理解Oracle分析函数的宝贵资源。
窗口函数包括像`LEAD()`, `LAG()`, `CUME_DIST()`, `PERCENT_RANK()`等,它们在数据透视、趋势分析和预测中非常有用。 **4. 报表函数** 报表函数通常是分析函数的实用应用,例如计算累计销售额、同比增长率等。...