Oracle函数 lag 用法详解及示例演示(Oracle函数lag)
Oracle 函数lag 用法详解及示例演示
Oracle 函数lag 用于查找和返回结果集中指定行之前的行的值,让用户能够依据给定的偏移量来比较当前行和以前的所有行的值,是结果集中数据之间进行关联的一种比较方法。它具有与 lead,first_value 和 last_value 相同的语法,同时还提供了独特的 offset 功能,支持在当前行和任意之前的行之间进行数据比较。
基本用法
下面是 lag 函数的基本语法:
lag(scalar_expression, offset, {default | NULL})
OVER ( [partition_by_clause]
order_by_clause )
其中:
scalar_expression:表示需要比较的表达式
offset:表示离当前行的偏移量
default:表示在没有获取到参考行的值的情况下,选择默认返回值
NULL:表示在没有获取到参考行的值的情况下,直接返回 null
PARTITION BY/ORDER BY:表示对结果集进行分组和排序操作
示例演示
下面是一个使用 lag 函数进行数据比较的示例:
假设有如下表 emp:
| empno | ename | sal |
|——-|——–|——–|
| 7369 | SMITH | 800.00 |
| 7499 | ALLEN | 1600.00|
| 7521 | WARD | 1250.00|
| 7566 | JONES | 2975.00|
| 7654 | MARTIN | 1250.00|
| 7698 | BLAKE | 2850.00|
| 7782 | CLARK | 2450.00|
| 7788 | SCOTT | 3000.00|
| 7839 | KING | 5000.00|
| 7844 | TURNER | 1500.00|
| 7876 | ADAMS | 1100.00|
查询当前员工的工资,并与上一个员工的工资进行比较,可以通过下面的 SQL 语句实现:
“`sql
select
empno,
ename,
sal,
lag(sal, 1, 0) over (order by empno desc) prev_sal
from emp
order by empno desc
结果如下:
| empno| ename | sal | prev_sal||------|--------|--------|----------|
| 7876 | ADAMS | 1100.00| 1500.00 || 7844 | TURNER | 1500.00| 5000.00 |
| 7839 | KING | 5000.00| 3000.00 || 7788 | SCOTT | 3000.00| 2450.00 |
| 7782 | CLARK | 2450.00| 2850.00 || 7698 | BLAKE | 2850.00| 2975.00 |
| 7654 | MARTIN | 1250.00| 1250.00 || 7566 | JONES | 2975.00| 1600.00 |
| 7521 | WARD | 1250.00| 800.00 || 7499 | ALLEN | 1600.00| 0.0 |
| 7369 | SMITH | 800.00 | 0.0 |
可以看到,lag 函数可以将当前员工的工资,与上一个员工的工资进行比较,以便获得我们想要的结果。
总结lag 函数是 Oracle 数据库中提供的一种比较方法,它允许用户在当前行和任意之前的行之间进行数据比较,并可以在没有获取到参考行的值的情况下指定默认返回值或者直接返回 null。本文详细讲解了 lag 函数的用法及其示例演示,帮助用户进行数据的比较。