在SQL中,OVER函數用于計算窗口函數的結果。窗口函數是一類函數,用于在查詢結果的某個窗口或分組上執行計算操作。OVER函數可以配合窗口函數使用,對查詢結果的指定分組或窗口進行計算,并返回計算結果。
OVER函數在SELECT語句的SELECT子句中使用,其語法如下:
窗口函數() OVER (PARTITION BY 列名1, 列名2,... ORDER BY 列名3, 列名4,...)
其中,窗口函數是一種聚合函數,如SUM、AVG、COUNT等等。PARTITION BY子句用于指定分組的列,ORDER BY子句用于指定排序的列。
OVER函數的作用是將查詢結果分成多個分組或窗口,并對每個分組或窗口應用窗口函數進行計算。它可以用于計算分組內的累計值、排名、行號等。
舉個例子,假設有以下的Sales表:
OrderID | Product | Quantity | Price |
---|---|---|---|
1 | A | 10 | 5 |
2 | A | 5 | 10 |
3 | B | 8 | 15 |
4 | B | 12 | 20 |
如果我們想要計算每個產品的累計銷售量和累計銷售額,可以使用窗口函數來實現:
SELECT OrderID, Product, Quantity, Price,
SUM(Quantity) OVER (PARTITION BY Product ORDER BY OrderID) AS TotalQuantity,
SUM(Quantity * Price) OVER (PARTITION BY Product ORDER BY OrderID) AS TotalPrice
FROM Sales;
這里,我們使用SUM函數作為窗口函數,通過PARTITION BY子句將數據按照Product分組,然后按照OrderID排序。結果如下:
OrderID | Product | Quantity | Price | TotalQuantity | TotalPrice |
---|---|---|---|---|---|
1 | A | 10 | 5 | 10 | 50 |
2 | A | 5 | 10 | 15 | 100 |
3 | B | 8 | 15 | 8 | 120 |
4 | B | 12 | 20 | 20 | 360 |
可以看到,TotalQuantity列和TotalPrice列分別計算了每個產品的累計銷售量和累計銷售額。