sql over开窗函数

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

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

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

如图:

代码如下:

select
  customerID,
  SUM(totalPrice) over() as AllTotalPrice,
  SUM(totalPrice) over(partition by customerID) as cusTotalPrice,
  totalPrice
  from OP_Order

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

代码如下

 with tabs as
 (
  select
   customerID,
   SUM(totalPrice) over() as AllTotalPrice,
   SUM(totalPrice) over(partition by customerID) as cusTotalPrice,
   AVG(totalPrice) over(partition by customerID) as avgCusprice,
   AVG(totalPrice) over() as avgTotalPrice,
   totalPrice
 from OP_Order
 )
 select
  customerID,
   AllTotalPrice,
   cusTotalPrice,
   totalPrice,
   avgCusprice,
   avgTotalPrice,
   cusTotalPrice/AllTotalPrice as CusAllPercent,
   totalPrice/cusTotalPrice as cusToPercent
 from tabs

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

总结:领用聚合函数再结合over子句,可以使表格向右扩张。并进行一些数据的统计。

参考: over子句

over子句的详解

转载自:http://www.cnblogs.com/85538649/archive/2011/08/13/2137370.html

时间: 2024-10-11 23:36:49

sql over开窗函数的相关文章

SQL SERVER 开窗函数简介

在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW_NUMBER() OVER(ORDER BY OrderDate) AS Number, OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK) ) SELECT Number,OrderID,CustomerID, Employ

SQL SERVER开窗函数

SQL SERVER开窗函数 总结的很好,转来做个笔记. 转自:http://www.cnblogs.com/csdbfans/p/3504845.html 今天将要介绍SQL Sever的开窗函数,何谓开窗函数,不懂吧.反正对于我来说,我是摸不着头脑了,第一次听说过.那么,什么是开窗函数,其实可以理解为是聚合函数的一个加强版.因为使用聚合函数的话(不包括子查询的情况),整个查询都只能是聚合列返回值,而不能有基础行的返回值.那么对于需要基础行的返回值的话,就需要使用复杂的子查询或者是存储过程等才

sql over开窗函数,

sql over开窗函数, 1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单表(order)中统计中,生成这么每一条记录都包含如下信息:“所有订单的总和”.“每一位客户的所有订单的总和”.”每一单的金额“ 关键点:使用了sum() over() 这个开窗函数 如图: 代码如下: 3.在订单表(order)中统计中,生成这么每一条记录都包含如下信息:“所有订单的总和(AllT

SQL SEVER 开窗函数总结

作为一名刚刚入门的开发人员,要学的东西很多很多,有些无从下手.秉着"问题是病.技术是药.对症下药"的原则,将工作中遇到的问题所需的技术进行梳理.归纳和总结. 一.什么是开窗函数 首先,什么是开窗函数,与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值,开窗函数可以为每组返回多个值,因为开窗函数所执行聚合计算的行集组是窗口(这里的窗口是指运算将要操作的行的集合).在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子

【转】SQL SERVER 开窗函数简介

在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW_NUMBER() OVER(ORDER BY OrderDate) AS Number, OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK) ) SELECT Number,OrderID,CustomerID, Employ

SQL SERVER 开窗函数

引入 这是一道常见的面试题,在实际项目中经常会用到. 需求:求出以产品类别为分组,各个分组里价格最高的产品信息. declare @t table( ProductID int, ProductName varchar(20), ProductType varchar(20), Price int) insert @t select 1,'name1','P1',3 union all select 2,'name2','P1',5 union all select 3,'name3','P2'

SQL中常用函数

SELECT CONVERT(varchar(100), GETDATE(), 23) AS  日期 结果:2017-01-05 select ISNULL(price,'0.0')   FROM table 将表中为null的值变成0.0 select * from [DBData].[dbo].[T_Student] where [Name]='LILEI' 等效于: select * from [DBData].[dbo].[T_Student] where [Name]='lilei'

SQL开窗函数

开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成.为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数的使用使得这些经典的难题可以被轻松的解决.目前在 MSSQLServer.Oracle.DB2 等主流数据库中都提供了对开窗函数的支持,不过非常遗憾的是 MYSQL 暂时还未对开窗函数给予支持. 开窗函数简介:与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值

sql中的 开窗函数over() 聚合函数 排名函数

开窗函数与聚合函数一样,都是对行的集合组进行聚合计算.它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列.反正我理解这个函数已经使用好子查询或者是其它方式求得聚合列的值给我合并. 以书中的例子一步一步来介绍,假设要计算所有人员的总数,我们可以执行下面的SQL语句: SELECT COUNT(FName) FROM T_Person 这种方式比较直接,只返回一个聚合列的值,没有任