Sql server 開窗函數over()的語法

用法一:與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

相關文章
相關標籤/搜索