Oracle的LAG函数是一种分析函数,用于在查询结果中获取当前行之前的某一行的数据
LAG函数的语法如下:
LAG(expr, offset, default) OVER (
[PARTITION BY partition_expression]
ORDER BY order_expression
)
其中:
expr
:要获取偏移行的值的表达式。offset
:可选参数,指定要偏移的行数。默认值为1,表示获取当前行之前的一行数据。default
:可选参数,指定当偏移行不存在时返回的默认值。PARTITION BY
子句:将结果集划分为多个分区,以便在每个分区内进行LAG操作。ORDER BY
子句:指定在分区内对行进行排序的顺序。LAG函数常用于计算累积总和、比较相邻行的值等场景。例如,以下查询使用LAG函数计算每个部门的员工薪资增长率:
SELECT
department_id,
employee_id,
salary,
LAG(salary) OVER (PARTITION BY department_id ORDER BY hire_date) AS prev_salary,
((salary - LAG(salary) OVER (PARTITION BY department_id ORDER BY hire_date)) / LAG(salary) OVER (PARTITION BY department_id ORDER BY hire_date)) * 100 AS salary_growth_rate
FROM
employees;
在这个例子中,我们首先使用LAG函数获取每个员工在同一部门中的前一个员工的薪资(prev_salary
),然后计算当前员工的薪资与前一个员工的薪资之间的差异百分比(salary_growth_rate
)。