zoukankan      html  css  js  c++  java
  • 教为学:Oracle SQL学习之路(二):分析函数之相邻

    教为学: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是可选的。

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

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

  • 相关阅读:
    javascript定义类和实例化类
    c# 注册表操作,创建,删除,修改,判断节点是否存在
    asp.net 获得文件属性中的修改时间,获得系统文件属性的方法,最后一次写入时间
    研究“QQ开心农场”一点心得
    c# winform socket网络编程,点对点传输文件,socket文件传输,监听端口
    用C#创建Windows服务(Windows Services)
    c# webform js文件获取客户端控件,后台cs获取前台客户端控件的值,c#和js的交互
    c# asp.net webform web页面打印,可以控制需要打印和不需要打印的位置
    c# asp.net 调用系统设置字体文本框,设置label或页面字体,大小,FontDialog
    c# 计算程序执行时间,计算一段代码执行所用的时间,测试效率
  • 原文地址:https://www.cnblogs.com/jiaoweixue/p/3107693.html
Copyright © 2011-2022 走看看