OVER (
[ <PARTITION BY clause> ]
[ <ORDER BY clause> ]
[ <ROW or RANGE clause> ]
)
PARTITION BY 欄位
將Select查詢結果集依欄位內容作群組分類。(例 部門欄位 依各部門作群組再做計算)
ORDER BY 欄位 ASC | DESC
依PARTITION 定義群組結果集做邏輯順序,沒設定PARTITION的話就是全部。
ROWS | RANGE CURRENT ROW...
依PARTITION 定義與ORDER BY 的資料範圍,再設定指定的範圍詳下列說明。
UNBOUNDED PRECEDING
第一筆資料,指的是PARTITION 與 ORDER所限定的範圍。
<指定不帶正負號的值> PRECEDING
從目前資料往前幾筆。 RANGE 不允許這項指定。
CURRENT ROW
目前這一筆,可以當這一筆開始或到這一筆結束。
BETWEEN <開始筆數 > AND <結束筆數 >
與 ROWS 或 RANGE 一起使用,以指定計算的筆數視。 上限不能小於下限。
UNBOUNDED FOLLOWING
最後一筆資料,指的是PARTITION 與 ORDER所限定的範圍。
<指定不帶正負號的值> FOLLOWING
從目前資料往後幾筆。 RANGE 不允許這項指定。
備註
1.在含有一個 FROM 子句的單一查詢中,可以使用一個以上的視窗函數。 每個函數的 OVER 子
句在進行資料分割和進行排序時,都不一樣。
2.如未指定 PARTITION BY,此函數會將查詢結果集的所有資料列視為單一群組。
3.如果未指定 ORDER BY,則將整個資料分割用於視窗框架。 這只適用於不需要 ORDER BY 子
句的函數。 如果未指定 ROWS/RANGE,但指定了 ORDER BY,則將
RANGE UNBOUNDED PRECEDING AND CURRENT ROW 當做視窗框架的預設值。
這只適用於可以接受選擇性 ROWS/RANGE 指定的函數。
例如,排名函數不能接受 ROWS/RANGE,因此,即使存在 ORDER BY 而不存在 ROWS/RANGE
,這個視窗框架依然不適用。
4.如果指定了 ROWS/RANGE 而且 <之前的視窗框架> 用於 <視窗框架範圍> (簡短語法),
則這個指定會用於視窗框架邊界開始點,而 CURRENT ROW 則用於邊界結束點。
例如,“ROWS 5 PRECEDING” 等於 “ROWS BETWEEN 5 PRECEDING AND CURRENT ROW”。
沒有留言:
張貼留言