`

教为学:Oracle SQL学习之路(二):分析函数之相邻

阅读更多
原帖地址:http://www.cnblogs.com/jiaoweixue/archive/2013/05/30/3107693.html
  1. 我坚信初学者更加明白初学者学习的困难在哪里。
  2. 我坚信最好的学习资料是自己亲手记录。
  3. 我坚信最好的学习方法是自己动手。
  4. 我坚信最好的检验方式就是能把自己所学到的东西转手教给别人。
  5. -----作者: 高鹏

    教为学:Oracle SQL学习之路(二):分析函数之相邻

    前言

    相邻是一种什么概念?

    数据库里面的相邻又是一种什么概念?

    相邻最典型的应用场景是什么?

    同比和环比的概念大家清楚否。

    同样先上例子:

    1. select deptno,ename,
    2. lag(ename,1,'AAA') over(partition by deptno order by ename) lower_name,
    3. lead(ename,1,'ZZZ') over(partition by deptno order by ename) higer_name
    4. from emp;

    结果如下:

    DEPTNO

    ENAME

    LOWER_NAME

    HIGER_NAME

    10

    CLARK

    AAA

    KING

    10

    KING

    CLARK

    MILLER

    10

    MILLER

    KING

    ZZZ

    20

    ADAMS

    AAA

    FORD

    20

    FORD

    ADAMS

    JONES

    20

    JONES

    FORD

    SCOTT

    20

    SCOTT

    JONES

    SMITH

    20

    SMITH

    SCOTT

    ZZZ

    30

    ALLEN

    AAA

    BLAKE

    30

    BLAKE

    ALLEN

    JAMES

    30

    JAMES

    BLAKE

    MARTIN

    30

    MARTIN

    JAMES

    TURNER

    30

    TURNER

    MARTIN

    WARD

    30

    WARD

    TURNER

    ZZZ

    在这里有必要把执行计划贴出来:

    1. Execution Plan
    2. ----------------------------------------------------------
    3. Plan hash value: 3145491563
    4.  
    5. ---------------------------------------------------------------------------
    6. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    7. ---------------------------------------------------------------------------
    8. | 0 | SELECT STATEMENT | | 15 | 135 | 4 (25)| 00:00:01 |
    9. | 1 | WINDOW SORT | | 15 | 135 | 4 (25)| 00:00:01 |
    10. | 2 | TABLE ACCESS FULL| EMP | 15 | 135 | 3 (0)| 00:00:01 |
    11. ---------------------------------------------------------------------------
    12.  
    13.  
    14. Statistics
    15. ----------------------------------------------------------
    16.      1 recursive calls
    17.      0 db block gets
    18.      7 consistent gets
    19.      0 physical reads
    20.      0 redo size
    21.    981 bytes sent via SQL*Net to client
    22.    420 bytes received via SQL*Net from client
    23.      2 SQL*Net roundtrips to/from client
    24.      1 sorts (memory)
    25.      0 sorts (disk)
    26.     14 rows processed

    我执行了两个相邻函数,可是执行计划和上一次一样。

    Syntax

    LAG函数:

    LEAD函数:

    同样,这两个函数的用法上是一致的,唯一不同的是结果。

    用法详解

    这两个函数都提供了在不使用自连接的情况下,访问表中多个行的路径。

    再来一个例子:

    1. select last_name,
    2.         department_id,
    3.         hire_date,
    4.         salary,
    5.         lag(salary,1,0) over(partition by department_id order by hire_date) as prev_sal
    6. from employees;

    结果如下(节选):

    LAST_NAME

    DEPARTMENT_ID

    HIRE_DATE

    SALARY

    PREV_SAL

    Whalen

    10

    2003-09-17

    4400

    0

    Hartstein

    20

    2004-02-17

    13000

    0

    Fay

    20

    2005-08-17

    6000

    13000

    Raphaely

    30

    2002-12-07

    11000

    0

    Khoo

    30

    2003-05-18

    3100

    11000

    Tobias

    30

    2005-07-24

    2800

    3100

    Baida

    30

    2005-12-24

    2900

    2800

    Himuro

    30

    2006-11-15

    2600

    2900

    Colmenares

    30

    2007-08-10

    2500

    2600

    LAG/LEAD(v, n, dv)里的n表示位移,必须是0或正整数,dv是在没有取到对应值时的默认值。n默认是1,dv默认是null。

    其中order by 是必须的paritition by是可选的。

    当然,其实这后面都是可以接多列的。

    执行计划之所以没有贴,是因为结果是一样的。

     

     

     

     

     

本文链接

分享到:
评论

相关推荐

    ORACLE_分析函数大全

    Oracle分析函数是数据库管理系统Oracle中的一种高级SQL特性,它们在数据处理和分析中扮演着重要角色。分析函数允许用户在结果集的每一行上执行计算,不仅考虑当前行,还考虑了同一组内的其他行。这与传统的聚合函数...

    ORACLE报表分析利剑——分析函数

    分析函数作为Oracle数据库中一项高级功能,专为解决复杂报表统计需求设计,其核心优势在于能够对数据进行精细的分组处理后,计算基于这些分组的特定统计值。与传统的聚合函数不同,分析函数不仅能够实现分组统计,还...

    oracle分析函数参考手册

    ### Oracle分析函数详解 #### 一、概述 Oracle分析函数是一种强大的工具,它允许用户对分组数据执行复杂的计算,并且能够返回多个结果行。这与传统的聚合函数(如`SUM`、`COUNT`等)形成鲜明对比,后者通常只针对...

    oracle查询相邻上下行值

    ### Oracle 查询相邻上下行值 #### 背景与需求 在处理时间序列数据或具有某种排序的数据时,经常需要查询某一行记录与其相邻行(前一行或后一行)的数据。这种需求在财务分析、时间序列分析等领域非常常见。例如,...

    ORACLE分析函数详解

    Oracle分析函数是数据库管理系统Oracle中的一种高级特性,自Oracle 8.1.6版本开始引入,主要用于处理复杂的聚合计算和数据分析任务。它们提供了一种更高效、更灵活的方式来执行诸如累计计算、分组内的百分比计算、前...

    oracle 分析函数总结

    Oracle 分析函数是一种强大的SQL工具,它在Oracle数据库中用于处理复杂的分析操作,如累计计算、计算百分比、前N条记录查询以及移动平均数。分析函数是在Oracle 8.1.6版本引入的,目的是为了提高性能并解决无法通过...

    转帖--oracle分析函数+PLSQL小结

    Oracle分析函数是数据库查询中的一个强大工具,它们在处理数据集时提供了高级的聚合功能,可以对一组行进行计算,并返回单个值或一组值。分析函数与聚合函数(如SUM, AVG, COUNT等)类似,但有显著的区别:聚合函数...

    Oracle常见函数集锦

    通过学习和实践提供的SQL脚本,如“汇总报表开发过程学习研究.sql”和“分析sql.txt”,可以进一步加深对Oracle函数的理解和应用。 在日常工作中,可以结合各种工具,如SQL Developer、Toad等,来编写、测试和优化...

    Oracle分析函数手册

    Oracle分析函数是数据库管理系统Oracle中的一个强大特性,自8.1.6版本开始引入,用于对数据集执行更复杂的聚合操作。与普通的聚合函数(如SUM、COUNT、AVG等)不同,分析函数允许在结果集中返回多行,而不是单行的汇...

    Oracle分析函数参考手册

    ### Oracle分析函数参考手册知识点详解 #### 一、Oracle分析函数概述 Oracle分析函数自8.1.6版本起引入,主要用于对数据进行更复杂的分析处理。与传统的聚合函数(如SUM, AVG等)不同,分析函数能够在分组的基础上...

    sql学习笔记 常见问题总结

    SQL(Structured Query ...以上只是SQL学习笔记中的部分要点,实际应用中还需要结合具体数据库系统(如MySQL、Oracle、SQL Server等)的特点和最佳实践。通过持续学习和实践,才能真正精通SQL,成为数据管理的高手。

    oracle分析函数的使用

    Oracle分析函数是数据库管理系统Oracle中的一种高级特性,用于对数据集进行分析操作,提供了一种高效、简洁的方式来处理复杂的数据分析任务。分析函数在Oracle 8i版本中首次引入,极大地简化了之前需要通过自连接、...

    Oracle分析函数实践 - blog.docx

    Oracle分析函数是数据库查询中非常强大的工具,它们用于处理复杂的报表和统计需求,特别是在在线分析处理(OLAP)环境中。分析函数与聚合函数的主要区别在于,聚合函数对每个组只返回一行结果,而分析函数则可以针对...

    oracle 函数大全oracle 函数大全

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,它包含了大量的内置函数,这些函数极大地增强了SQL查询的能力,提高了数据处理的效率。本篇文章将详细介绍Oracle数据库中的一些关键函数,并提供实际应用...

    Oracle数据库SQL培训 数据库SQL语句编写培训教程 Oracle高级查询SQL优化 集合实际案例讲解 共26页.pptx

    在SQL查询中,这通常通过JOIN操作或窗口函数实现,如示例中的LEFT JOIN,以获取相邻记录的数据。 2. **同比/环比**:同比是指当前数值与去年同期数值的比较,而环比则是与前一时期数值的比较。在SQL中,同比可通过...

    Oracle10gR2分析函数(中英对照版).rar

    Oracle 10g R2中的分析函数是数据库查询和数据处理的重要工具,它们允许用户在一组行上执行计算,而不仅仅是单行。...通过深入学习和实践,你将能够熟练地运用这些分析函数,优化你的SQL查询,从而提升整个系统的性能。

    oracle分析函数的用法

    Oracle分析函数是数据库查询中的强大工具,它允许用户在数据集上执行复杂的分析操作,而不仅仅是简单的聚合。分析函数的特点在于它们能够对数据进行排序、筛选,并且可以在不同的分区、窗口和排序规则下运行,这使得...

    Oracle 10g SQL Fundamental Part 2

    3. **窗口函数**:Oracle 10g引入了窗口函数,如RANK()、ROW_NUMBER()、LEAD()和LAG(),这些函数在数据分析中非常有用,可以实现排序、计算排名、获取相邻行数据等功能。 4. **数据操作**:除了基本的INSERT、...

    Oracle 9i 分析函数参考手册

    Oracle 从版本 8.1.6 开始引入了分析函数,极大地扩展了SQL查询的能力。 首先,让我们来看看一些常见的分析函数: 1. AVG:计算指定表达式在一组或数据窗口内的平均值。例如,`AVG(salary) OVER (PARTITION BY ...

Global site tag (gtag.js) - Google Analytics