SQL 开窗函数over 与sum(),AVG(),MIN(),MAX()

1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作。而且利用over子句的分组效率比group by子句的效率更高。

 

 2.在订单表(order)中统计中,生成这么每一条记录都包含如下信息:“所有订单的总和”、“每一位客户的所有订单的总和”、”每一单的金额“

关键点:使用了sum() over() 这个开窗函数 

如图:

 

代码如下:

 

1   select 
2   customerID,
3   SUM(totalPrice) over()  as  AllTotalPrice,
4   SUM(totalPrice) over(partition by customerID)  as  cusTotalPrice,
5   totalPrice
6   from OP_Order

 

 

 3.在订单表(order)中统计中,生成这么每一条记录都包含如下信息:“所有订单的总和(AllTotalPrice)”、“每一位客户的所有订单的总(cusTotalPrice)”、”每一单的金额(totalPrice)“,”每一个客户订单的平均金额(avgCusprice)“,”所有客户的所有订单的平均金额(avgTotalPrice)“,"客户所购的总额在所有的订单中总额的比例(CusAllPercent)","每一订单的金额在每一位客户总额中所占的比例(cusToPercent)"。

 

 

 

 

 

 代码如下

复制代码
 1  with tabs  as
 2   (
 3    select 
 4   customerID,
 5   SUM(totalPrice) over()  as  AllTotalPrice,
 6   SUM(totalPrice) over(partition by customerID)  as  cusTotalPrice,
 7   AVG(totalPrice) over(partition by customerID)  as  avgCusprice,
 8   AVG(totalPrice) over()  as  avgTotalPrice,
 9   totalPrice
10   from OP_Order
11   )
12   select 
13   customerID,
14   AllTotalPrice,
15   cusTotalPrice,
16   totalPrice,
17  avgCusprice,
18  avgTotalPrice,
19   cusTotalPrice / AllTotalPrice  as  CusAllPercent,
20   totalPrice / cusTotalPrice  as  cusToPercent 
21   from tabs
22   
复制代码

 

 

4.在订单表(order)中统计中,生成这么每一条记录都包含如下信息:“所有订单的总和(AllTotalPrice)”、“每一位客户的所有订单 的总(cusTotalPrice)”、”每一单的金额(totalPrice)“,”每一个客户订单的平均金额(avgCusprice)“,”所有客 户的所有订单的平均金额(avgTotalPrice)“,"订单金额最小值(MinTotalPrice)","客户订单金额最小值(MinCusPrice)","订单金额最大值(MaxTotalPrice)","客户订单金额最大值(MaxCusPrice)","客户所购的总额在所有的订单中总额的比例(CusAllPercent)","每一订单的金 额在每一位客户总额中所占的比例(cusToPercent)"。

 

关键:利用over子句进行操作。

 如图:

 


 具体代码如下:

复制代码
 1  with tabs  as
 2   (
 3    select 
 4   customerID,
 5   SUM(totalPrice) over()  as  AllTotalPrice,
 6   SUM(totalPrice) over(partition by customerID)  as  cusTotalPrice,
 7   AVG(totalPrice) over(partition by customerID)  as  avgCusprice,
 8   AVG(totalPrice) over()  as  avgTotalPrice,
 9   MIN(totalPrice) over()  as  MinTotalPrice,
10   MIN(totalPrice) over(partition by customerID)  as  MinCusPrice,
11   MAX(totalPrice) over()  as  MaxTotalPrice,
12   MAX(totalPrice) over(partition by customerID)  as  MaxCusPrice,
13   totalPrice
14   from OP_Order
15   )
16   select 
17   customerID,
18   AllTotalPrice,
19   cusTotalPrice,
20   totalPrice,
21   avgCusprice,
22   avgTotalPrice,
23   MinTotalPrice,
24   MinCusPrice,
25   MaxTotalPrice,
26   MaxCusPrice,
27   cusTotalPrice / AllTotalPrice  as  CusAllPercent,
28   totalPrice / cusTotalPrice  as  cusToPercent 
29   from tabs
30   
复制代码
转自:http://www.cnblogs.com/85538649/archive/2011/08/13/2137370.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值