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
)。