lag和lead函数,用于取出数据的前n行的数据和后n行的数据,当然要和over(order by)一起组合
select id,name from dave
id name
4 SF
3 oracle
4 eygle
5 rman
4 export
dave表中有id和name的数据。lag函数是取出数据的前n行的数据,lead函数是取出数据的后n行的数据,直接在例子吧,简单明了
select id,name,lag(id,4) over (order by id) as v_ab from dave
id name v_ab
3 oracle
4 export
4 SF
4 eygle
5 rman 3
lag(id,n,values)才是整个lag的完整形式,其中的id是column_name,n就是前n行的,values就是缺省的值,如果省略n和values,默认n是1,values是null
其实完全可以理解n就是当前行的前n行的数据,如果有就显示,没有就显示values或者null值。上面的结果也可以解释了。
lag
函数后有个over(order by id)其中的order by让数据重新asc排序了,所以lag函数是必须建立在order
by的情况下,当然也可以order by name,不过最后显示的结果都是先order by然后对其lead或者lag的n行
当然lead函数和lad基本一样,不同的是一个是前n行一个是后n行
select id,name,lead(id,4) over(order by id) as v_ab from dave
3 oracle 5
4 export
4 SF
4 eygle
5 rman
select id,name,lead(id,4) over(order by 1) as v_ab from dave
上面的order by 1对吗,有结果吗,对的也是有结果的。
select id,name from dave order by 2 排序了
ORDER BY 项必须是 SELECT-list 表达式的数目,也就是前面的select column的列的总数范围内。
select id,name from dave order by 3,此时oracle就会报错了,因为无法排序找不到第三列column。
但是下面的
select
id,name,lead(id,4) over(order by id) as v_ab from
dave,此时查看sql执行计划是有window sort的排序计划,windows sort是一个窗口数据的排序,执行效率比全局sort
order by要高。
现在就关于order by的讨论就到这了,想用lead但是又不想通过order by来改变lead的值,就直接select id,name,lead(id,4) over(order by 1) as v_ab from dave。
参考至:http://blog.itpub.net/post/43172/521461
如有错误,欢迎指正
邮箱:czmcj@163.com
分享到:
相关推荐
Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。 代码如下:CREATE TABLE salaryByMonth( employeeNo varchar2(20)...
这篇文档将深入探讨Oracle中的分析函数,帮助你更好地理解和利用这一功能。 一、什么是分析函数 分析函数(Analytic Functions)是Oracle SQL中的高级特性,它们在数据集上执行计算,并返回基于分组或排序的数据...
例如,可以使用 Rollup 函数对数据进行分组和汇总,使用 Rank 函数对数据进行排名,使用 Lag 和 Lead 函数对数据进行延迟和前导操作,使用 Sum 和 Avg 函数对数据进行汇总和平均计算,使用 Ratio_to_Report 函数对...
Oracle数据仓库分析函数是数据库查询和分析中的重要工具,尤其对于商业智能(BI)和数据仓库项目来说,它们能够提供深度的数据洞察。本资源“oracle数据仓库分析函数汇总”聚焦于Oracle数据库中的分析函数,尤其是与...
7. 分组和窗口函数:GROUP BY用于分组数据,RANK(), DENSE_RANK(), ROW_NUMBER()用于排序和排名,LEAD()和LAG()获取相邻行的值。 8. 模式匹配函数:LIKE和INSTR()用于在WHERE子句中进行模式匹配。 9. 随机函数:...
4. **偏移量函数**:例如`LAG()`和`LEAD()`,用于访问前一行或后一行的数据。 #### 四、具体示例解析 ##### 示例1:计算每个班级的最高分 ```sql SELECT name, class, s, RANK() OVER (PARTITION BY class ORDER ...
某些分析函数如LAG和LEAD需要ORDER BY子句来正确工作。此外,ORDER BY子句还可以用来定义窗口范围,默认情况下,窗口从分区的第一行开始,直到当前行为止。 5. **WINDOWING子句** 窗口子句用于定义分析函数将在其...
**分析函数**如`RANK`、`DENSE_RANK`、`ROW_NUMBER`和`LAG`、`LEAD`等,提供了一种窗口函数的功能。它们可以在结果集的每一行上执行计算,而不仅仅是在分组级别上。例如,`RANK`可以为每行分配一个唯一的排名,`LAG`...
Oracle 分析函数是 Oracle 数据库中的一种强大功能,能够帮助用户快速进行数据分析和处理。在本文中,我们将对 Oracle 分析函数进行详细的介绍,并对其各个函数进行解释。 一、总体介绍 Oracle 分析函数的语法...
ROW_NUMBER,RANK,DENSE_RANK提供窗口排序,LEAD和LAG获取当前行的前一行或后一行数据,FIRST_VALUE和LAST_VALUE获取窗口内的第一个或最后一个值。 这个中文API文档将详细介绍这些函数的语法、参数、返回值以及...
Oracle 分析函数、窗口函数和报表函数是数据库查询和数据分析中的关键工具,尤其在复杂的OLAP(在线分析处理)系统中发挥着重要作用。在Oracle数据库中,这些功能提供了对大量数据进行高效处理的能力,帮助用户生成...
4. "oracle函数介绍(5) 分析函数简述.doc":分析函数,如RANK()、ROW_NUMBER()和LEAD/LAG(),在处理分组数据时非常有用,可以提供行级别的排序和计算。 5. "oracle函数介绍(6) 著名函数之分析函数.doc"和"oracle...
- 分析函数如ROW_NUMBER、RANK、DENSE_RANK、LAG、LEAD等,用于窗口查询,提供行间计算功能。 5. **连接和比较函数**: - CONCAT、||用于字符串连接。 - LIKE、IN、BETWEEN、NOT BETWEEN用于查询条件的构建。 -...
3. **使用`LAG()`和`LEAD()`函数** ```sql SELECT employee_id, salary, LAG(salary) OVER (ORDER BY salary) AS previous_salary, LEAD(salary) OVER (ORDER BY salary) AS next_salary FROM employees; ```...
6. **分析函数**:分析函数在处理大量数据时非常有用,如`RANK`、`DENSE_RANK`和`ROW_NUMBER`用于生成行序号,`LEAD`和`LAG`可以访问当前行的前一行或后一行数据,`FIRST_VALUE`和`LAST_VALUE`则用于获取分组内第一...
- `LEAD()`, `LAG()`: 提取当前行之后或之前的值。 - `FIRST_VALUE()`, `LAST_VALUE()`: 获取窗口内的第一个或最后一个值。 4. **分位数函数**: - `NTILE()`: 将结果集分割成n个相等的部分,返回每个行所在的...
在"Oracle函数大全-详细介绍.rar"这个压缩包中,包含了对Oracle数据库中各种函数的详细解析,包括分析函数、单值函数和聚合函数等。 首先,让我们来看看单值函数。单值函数接受一个或多个输入值,返回一个新的单一...
Oracle 10G是Oracle数据库的一个重要版本,其强大的功能和丰富的函数库使得数据库管理和开发更为高效。在Oracle 10G中,函数是SQL和PL/SQL编程中不可或缺的一部分,它们用于处理数据、进行计算、操作字符串以及执行...