窗口函數(Databricks SQL)

函數對一組行(稱為窗口)進行操作,並根據行組計算每一行的返回值。窗口函數對於處理諸如計算移動平均數、計算累積統計量或根據當前行的相對位置訪問行值等任務非常有用。

語法

函數window_name|window_name|window_spec函數ranking_function|analytic_function|aggregate_functionwindow_spec(分區通過分區(...(order_by(window_frame

參數

  • 函數

    操作窗口的函數。不同的函數類支持不同的窗口規格配置。

  • 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);>插入員工“麗莎”“銷售”1000035),“伊萬”“銷售”3200038),“弗雷德”“工程”2100028),“亞曆克斯”“銷售”3000033),“湯姆”“工程”2300033),“簡”“市場營銷”2900028),“傑夫”“市場營銷”3500038),“保羅”“工程”2900023),克洛伊的“工程”2300025);>選擇的名字部門工資年齡員工克洛伊工程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員工亞曆克斯銷售3303333333333333333麗莎銷售3506666666666666666埃文銷售3810保羅工程23025克洛伊工程25075弗雷德工程28025湯姆工程3310市場營銷2803333333333333333傑夫市場營銷3806666666666666666海倫市場營銷4010>選擇的名字部門工資最小值工資分區通過部門訂單通過工資作為最小值員工麗莎銷售1000010000亞曆克斯銷售3000010000埃文銷售3200010000海倫市場營銷2900029000市場營銷2900029000傑夫市場營銷3500029000弗雷德工程2100021000湯姆工程2300021000克洛伊工程2300021000保羅工程2900021000>選擇的名字工資滯後工資分區通過部門訂單通過工資作為滯後引領工資10分區通過部門訂單通過工資作為引領員工麗莎銷售1000030000亞曆克斯銷售300001000032000埃文銷售32000300000弗雷德工程2100023000克洛伊工程230002100023000湯姆工程230002300029000保羅工程29000230000海倫市場營銷2900029000市場營銷290002900035000傑夫市場營銷35000290000