用法一:與ROW_NUMBER()函數結合用,給結果進行排序編號,如圖:數據庫
代碼以下:ide
SELECT ROW_NUMBER() over(order by RequiredDate) num ,* from [Northwind].[dbo].[Orders]
用法二:跟聚合函數一塊兒使用,利用over子句的分組效率比group by子句的效率更高。函數
在Northwind數據庫的訂單表Orders中查詢"訂單id","客戶id","運費","全部訂單的總數",「每個客戶的總運費」,「全部客戶的總運費」,「每個客戶的平均運費」,「全部客戶的平均運費」,"每個客戶全部訂單中最大的運費","全部客戶中最大運費","每個客戶全部訂單中最小的運費","全部客戶中最小運費",以下圖:ui
代碼以下:spa
SELECT [OrderID] --訂單id ,[CustomerID] --客戶id ,[Freight] --運費 ,COUNT(OrderID) over() as totalNum --一全部訂單的總數 ,SUM(Freight) over(partition by customerid) as cusTotalFreight --每個客戶的總運費 ,SUM(Freight) over() as totalFreight --全部客戶的總運費 ,AVG(Freight) over(partition by customerid) as cusAvgFreight --每個客戶的平均運費 ,AVG(Freight) over() as avgFreight --全部客戶的平均運費 ,MAX(Freight) over(partition by customerid) as cusMaxFreight --每個客戶全部訂單中最大的運費 ,MAX(Freight) over() as maxFreight --全部客戶中最大運費 ,MIN(Freight) over(partition by customerid) as cusMinFreight --每個客戶全部訂單中最小的運費 ,MIN(Freight) over() as minFreight --全部客戶中最小運費 FROM [Northwind].[dbo].[Orders]
總結:運用開窗函數over()再結合聚合函數,可使表格向右擴張,並進行一些數據的統計code