Sql server 开窗函数over()的语法

 

用法一:与ROW_NUMBER()函数结合用,给结果进行排序编号,如图:

 

代码如下:

SELECT ROW_NUMBER() over(order by RequiredDate) num
       ,* from  [Northwind].[dbo].[Orders]

 

用法二:跟聚合函数一起使用,利用over子句的分组效率比group by子句的效率更高。

在Northwind数据库的订单表Orders中查询"订单id","客户id","运费","所有订单的总数",“每一个客户的总运费”,“所有客户的总运费”,“每一个客户的平均运费”,“所有客户的平均运费”,"每一个客户所有订单中最大的运费","所有客户中最大运费","每一个客户所有订单中最小的运费","所有客户中最小运费",如下图:

 

代码如下:

复制代码
  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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值