在Oracle中,OVER函數通常與分析函數一起使用,以便在結果集中執行窗口函數計算。語法如下:
<analytic_function> OVER (
[PARTITION BY <column_list>]
[ORDER BY <column_list>]
[window_clause]
)
其中,<analytic_function>
表示要執行的分析函數,如SUM、AVG、ROW_NUMBER等;<column_list>
是分區和排序的列名;window_clause
用于指定窗口規范,如RANGE或ROWS等。
例如,要計算每個部門的平均工資與該部門內的所有員工的平均工資之間的差異,可以使用以下查詢:
SELECT
department_id,
employee_id,
salary,
AVG(salary) OVER (PARTITION BY department_id) AS department_avg_salary,
AVG(salary) OVER () AS overall_avg_salary,
AVG(salary) OVER () - AVG(salary) OVER (PARTITION BY department_id) AS salary_difference
FROM employees;
在這個例子中,AVG(salary) OVER (PARTITION BY department_id)
計算每個部門的平均工資,AVG(salary) OVER ()
計算整個結果集的平均工資,然后計算每個部門的平均工資與整個結果集的平均工資之間的差異。