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

相关文章
相关标签/搜索