分析函數:將集合進行分區(使用partition by),再計算這些分區的值,與分組函數最大的不同在於能夠為每一個分區返回多行的值。
語法: function_name(<argument1>,<argument2>,...)
OVER
(<Partition-Clause><Order by - Cluase><Windowing Clause>)
其中,function_name : 用於指定分析函數名,Oracle提供了26個分析函數,比如 sum,count,avg,min, max, row_number等。
<argument> : 分析函數的參數
OVER :關鍵字,用於標識分析函數,否則查詢分析器就不能區別,比如 sum 是分組函數還是一個分析函數。
<Partition-Clause> : 分區子句,可選,如果不存在任何分區子句,則全部的結果集可看作一個單一的大區。
<Order by-Clause> : 可選的排序子句,用來根據結果集進行排序。
<Windowing Clause> : 用於定義分析函數將在其上操作的行的集合。
當使用了 ORDER BY 子句后,ORacle將添加一個默認的開窗子句,這意味着計算中所使用的行的集合是當前分區中當前行和前面的所有行。
開窗子句 Windowing Clause必須定義在 Order By子句之后,用來定義一個變化或固定的數據窗口,分析函數將對這些數據進行操作。
eg : rows between unbounded preceding and unbounded following ,是Oracle提供的開窗子句,是指將計算第一條到最后一條的記錄。