首先我们创建一个表user_info表:

CREATE TABLE

user_info(user_id NUMBER(11) primary key,

user_name VARCHAR2(14),

user_age NUMBER(4),

user_birthday DATE);

插入一些数据用于测试,如下:

测试数据截图

前期工作准备完成,接下来就准备测试这些函数了!

函数简介

lag()和lead()这两个函数可以查询我们得到的结果集上下偏移相应行数的相应的结果。

形象的说明如下:

lag()函数:

查询当前行向上偏移n行对应的结果

该函数有三个参数:第一个为待查询的参数列名,第二个为向上偏移的位数,第三个参数为超出最上面边界的默认值。

看如下代码:

–查询向上偏移 1 位的年龄

SELECT user_id,

user_age,

lag(user_age, 1, 0) over(ORDER BY user_id) RESULT

FROM user_info;

结果图示:

lag函数运行图示

lead()函数:

查询当前行向下偏移n行对应的结果

该函数有三个参数:第一个为待查询的参数列名,第二个为向下偏移的位数,第三个参数为超出最下面边界的默认值。

如下代码:

–查询向下偏移 2 位的年龄

SELECT user_id,

user_age,

lead(user_age, 2, 0) over(ORDER BY user_id)

FROM user_info;

结果图示:

LEAD()函数图示

在掌握了上面相关的知识之后,我们,可以来试着解决一个 Oracle问题:

例题描述

英文原题: Show the department number, name, number of employees, and

average salary of all departments, together with the names, salaries,

and jobs of the employees working in each department. 题意理解:

查找出员工信息,以及其所在部门的基本信息和该部门的平均工资。

结果格式示意图:

求解思路:

查找出员工信息,以及其所在部门的基本信息和该部门的平均工资。这一步相对来说会比较基础!

但是如何去除相同的部门名称等呢?

我们可以按照部门名称将结果进行分组

然后使用lag()函数取出每个分组的上面一位,如果到了上边界就设置其值为NULL。

然后使用decode()函数使得相应属性对应为NULL的显示原来的值,不为NULL的显示为NULL。

代码如下:

SELECT decode(lag(depttable.department_name, 1, NULL)

over(PARTITION BY depttable.department_name ORDER BY emp.department_id ASC),

NULL,

depttable.department_id,

NULL) temp_dep_id,

decode(lag(depttable.department_name, 1, NULL)

over(PARTITION BY depttable.department_name ORDER BY emp.department_id ASC),

NULL,

depttable.department_name,

NULL) temp_dep_name,

decode(lag(depttable.department_name, 1, NULL)

over(PARTITION BY depttable.department_name ORDER BY emp.department_id ASC),

NULL,

depttable.employees_num,

NULL) temp_emp_num,

decode(lag(depttable.department_name, 1, NULL)

over(PARTITION BY depttable.department_name ORDER BY emp.department_id ASC),

NULL,

depttable.avg_salary,

NULL) temp_emp_sa,

emp.last_name,

emp.salary,

emp.job_id

FROM (SELECT dep1.department_id,

dep1.department_name,

COUNT(emp1.employee_id) employees_num,

round(nvl(AVG(salary), 0), 2) avg_salary

FROM employees emp1,

departments dep1

WHERE emp1.department_id(+) = dep1.department_id

GROUP BY dep1.department_id,

dep1.department_name

ORDER BY dep1.department_id) depttable,

employees emp

WHERE depttable.department_id = emp.department_id

ORDER BY emp.department_id ASC,

temp_dep_name ASC;

oracle lead 方法,Oracle SQL之lag()和lead()函数使用详解相关推荐

  1. oracle看一条sql的trace,SQL_TRACE和10046事件详解

    sql_trace和10046事件都是我们在优化sql上面应用的非常多的工具,我们可以使用这两个工具知道当前正在执行的sql究竟在做什么 一,SQL_TRACE: SQL_TRACE命令会将执行的整个 ...

  2. php的empty方法怎么用js写,jQuery.empty() 函数用法详解

    empty()函数用于清空每个匹配元素内的所有内容. empty()函数将会移除每个匹配元素的所有子节点(包括文本节点.注释节点等所有类型的节点). 该函数属于jQuery对象(实例). 语法 jQu ...

  3. Oracle SQL语句执行流程与顺序原理详解

    以前读的文章,保存到本地了,忘记来源了,分享一下,本地存着怕丢了 Oracle SQL语句执行流程与顺序原理详解 第一步:客户端把语句发给服务器端执行 当我们在客户端执行SQL语句时,客户端会把这条S ...

  4. mybatis接口中的方法重载_MyBatis的Mapper接口以及Example的实例函数及详解

    一.mapper接口中的方法解析 mapper接口中的函数及方法 方法 功能说明 int countByExample(UserExample example) thorws SQLException ...

  5. MS SQL Server:分区表、分区索引详解

    MS SQL Server:分区表.分区索引 详解 1. 分区表简介 使用分区表的主要目的,是为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性.  大型表:数据量巨大的表.  访问模式: ...

  6. oracle 按照lead,Oracle之Lead和Lag偏移量函数使用详解

    Oracle有两个函数:LEAD和LAG,这两个函数都是用来计算偏移量的分析函数,这两个函数的用法相同. Oracle官方文档解释是: LEADis an analytic function. It ...

  7. SQL中lag()和lead()函数使用

    首先我们创建一个表user_info表: CREATE TABLEuser_info(user_id NUMBER(11) primary key, user_name VARCHAR2(14), u ...

  8. oracle表稅片整理,oracle_Oracle表碎片整理操作步骤详解,高水位线(HWL)下的许多数据 - phpStudy...

    Oracle表碎片整理操作步骤详解 高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描到高水位线的数据块,也就是说oracle要做许多的无用功!因此oracle提供了shrink s ...

  9. Oracle Database 12c RMAN全量+增量备份+归档日志恢复详解

    Oracle可以非常方便的把数据库恢复到具体某个时间的状态,而且还支持全备和多级增备,备份无需停止应用服务.比起DB2需要手动逐级恢复增量备份和归档日志,RMAN是非常简单好用的数据库商业解决方案. ...

最新文章

  1. 记一次Sonar执行失败的修复
  2. python工程师一个月多少钱-苏州工业园区学编程大概多少钱一个月
  3. 开源软件能够赚到钱吗
  4. [LeetCode 123] - 买入与卖出股票的最佳时机III(Best Time to Buy and Sell Stock III)
  5. 途牛java面试题_途牛java面试题.docx
  6. Unity toLua加载lua的流程
  7. Android 补间动画(二)
  8. 最小割集Stoer-Wagner算法
  9. 龙卷风路径_龙卷风一般在中国的什么地方有?
  10. 5 mysql 凤舞天骄_浅谈5行刺客的技能 凤舞天骄
  11. Retrofit 框架详解和使用
  12. 连续英文字符串分词工具wordninja添加自定义名词
  13. [UVALive - 4329] Ping pong 树状数组入门
  14. 小米9 淘宝 618列车加油 脚本 Android10 MIUI11
  15. 大多数人都自我嫌弃而不自知
  16. 社科院与杜兰大学金融管理硕士——承载梦想,带自己遨游世界的“风帆”
  17. Elasticsearch教程部署使用
  18. 切换窗口时改变页面title标题
  19. PDF文件可以修改吗,怎么修改PDF文件内容
  20. live555与rtsp

热门文章

  1. 市北·GMIS 2019 全球数据智能峰会全记录
  2. 如何迁移GitGitolite服务器
  3. 【Unity】场景异步加载、卸载
  4. 学在信息——一方豪杰
  5. Echarts图表插件(4.x版本)使用(二、带分类筛选的多个图表/实例化多个ECharts,以关系图/force为例)...
  6. Linux下菜鸟用XMMS(转)
  7. rocketmq DLedger主从自动切换
  8. bom成本分析模型_用BOM表算成本的大致思路是什么?
  9. 江南大学计算机技术复试科目,江南大学计算机专硕考哪些科目
  10. 有道云笔记Android app离线缓存,有道云笔记文件保存在哪里在哪个路径下