窗口函數
適用於:磚的SQL磚運行時
函數,這些函數對一組行(稱為窗口)進行操作,並根據行組計算每行的返回值。窗口函數對於處理諸如計算移動平均值、計算累積統計量或根據當前行的相對位置訪問行值等任務非常有用。
語法
函數在{window_name|(window_name)|window_spec}函數:{ranking_function|analytic_function|aggregate_function}window_spec:([分區通過分區[,...]][order_by][window_frame])
參數
函數
操作窗口的函數。不同的函數類支持不同的窗口規格配置。
ranking_function
任何一個窗口函數排序.
如果指定了window_spec,則必須包含ORDER BY條款,但不是window_frame子句。
analytic_function
任何一個解析窗函數.
aggregate_function
任何一個聚合函數.
如果指定了,函數不能包含FILTER子句。
window_spec
這個子句定義了如何對行進行分組、在組內排序,以及函數對分區中的哪些行進行操作。
分區
一個或多個表達式,用於指定一組定義函數操作範圍的行。如果沒有指定PARTITION子句,則分區由所有行組成。
order_by
的ORDER BY條款指定分區內的行順序。
window_frame
的窗框條款指定聚合或分析函數所操作的分區內的滑動行子集。
您可以指定SORT BY作為ORDER BY的別名。
您還可以指定DISTRIBUTE BY作為PARTITION BY的別名。在沒有ORDER BY的情況下,可以使用CLUSTER BY作為PARTITION BY的別名。
例子
>創建表格員工(名字字符串,部門字符串,工資INT,年齡INT);>插入成員工值(“麗莎”,“銷售”,10000,35),(“伊萬”,“銷售”,32000,38),(“弗雷德”,“工程”,21000,28),(“亞曆克斯”,“銷售”,30000,33),(“湯姆”,“工程”,23000,33),(“簡”,“市場營銷”,29000,28),(“傑夫”,“市場營銷”,35000,38),(“保羅”,“工程”,29000,23),(克洛伊的,“工程”,23000,25);>選擇名字,部門,工資,年齡從員工;克洛伊工程2300025弗雷德工程2100028保羅工程2900023海倫市場營銷2900040湯姆工程2300033簡市場營銷2900028傑夫市場營銷3500038埃文銷售3200038麗莎銷售1000035亞曆克斯銷售3000033>選擇名字,部門,排名()在(分區通過部門訂單通過工資)作為排名從員工;麗莎銷售100001亞曆克斯銷售300002埃文銷售320003.弗雷德工程210001湯姆工程230002克洛伊工程230002保羅工程290004海倫市場營銷290001簡市場營銷290001傑夫市場營銷350003.>選擇名字,部門,DENSE_RANK()在(分區通過部門訂單通過工資行之間的無限前和當前的行)作為dense_rank從員工;麗莎銷售100001亞曆克斯銷售300002埃文銷售320003.弗雷德工程210001湯姆工程230002克洛伊工程230002保羅工程290003.海倫市場營銷290001簡市場營銷290001傑夫市場營銷350002>選擇名字,部門,年齡,CUME_DIST()在(分區通過部門訂單通過年齡範圍之間的無限前和當前的行)作為cume_dist從員工;亞曆克斯銷售330.3333333333333333麗莎銷售350.6666666666666666埃文銷售381.0保羅工程230.25克洛伊工程250.75弗雷德工程280.25湯姆工程331.0簡市場營銷280.3333333333333333傑夫市場營銷380.6666666666666666海倫市場營銷401.0>選擇名字,部門,工資,最小值(工資)在(分區通過部門訂單通過工資)作為最小值從員工;麗莎銷售1000010000亞曆克斯銷售3000010000埃文銷售3200010000海倫市場營銷2900029000簡市場營銷2900029000傑夫市場營銷3500029000弗雷德工程2100021000湯姆工程2300021000克洛伊工程2300021000保羅工程2900021000>選擇名字,工資,滯後(工資)在(分區通過部門訂單通過工資)作為滯後,引領(工資,1,0)在(分區通過部門訂單通過工資)作為引領從員工;麗莎銷售10000零30000亞曆克斯銷售300001000032000埃文銷售32000300000弗雷德工程21000零23000克洛伊工程230002100023000湯姆工程230002300029000保羅工程29000230000海倫市場營銷29000零29000簡市場營銷290002900035000傑夫市場營銷35000290000