数据库--SQLServer--over函数的应用
2014-02-17 14:25
204 查看
本文将为您介绍SQL中的分析函数,除了ORDER BY(按…排序)语句外,分析函数是一条查询被执行的操作,供您参考,希望对您学习SQL函数的使用能够有所帮助。
所有合并、WHERE、GROUP BY、HAVING语句都是分析函数处理之前完成的。
因此,分析函数只出现在选择目录或ORDER BY(按…排序)语句中。
使用Over语句的情况 :
A. 等级函数如, ROW_NUMBER, DENSE_RANK, RANK, NTILE 使用 OVER(ORDER BY) 语句
example.
view sourceprint?01 USE AdventureWorks;
02 GO
03 SELECT c.FirstName, c.LastName
04 ,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
05 ,s.SalesYTD, a.PostalCode
06 FROM Sales.SalesPerson s
07 INNER JOIN Person.Contact c
08 ON s.SalesPersonID = c.ContactID
09 INNER JOIN Person.Address a
10 ON a.AddressID = c.ContactID
11 WHERE TerritoryID IS NOT NULL
12 AND SalesYTD <> 0;
13 GO
ROW_NUMBER() 增添顺序序号,即时存在相同的也递增序号
RANK()相同的数据序号相同,接下来为跳号(是跳跃排序,有两个第二名时接下来就是第四名)
dense_rank()相同的数据序号相同,接下来顺序递增序号(是连续排序,有两个第二名时仍然跟着第三名)
ntile(N)将记录分为N组。
B. 聚合函数如, SUM,AVG,COUNT,MIN,MAX等使用OVER(PARTITION BY)语句
Example.
01 Copy Code
02 USE AdventureWorks;
03 GO
04 SELECT SalesOrderID, ProductID, OrderQty
05 ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'
06 ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg'
07 ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count'
08 ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min'
09 ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max'
10 FROM Sales.SalesOrderDetail
11 WHERE SalesOrderID IN(43659,43664);
12 GO
OVER 函数是分析函数,其中语法: over([分区子句][排序子句])分区子句类似于sql语句中的group by;
排序子句类似于sql语句中的order by;
所有合并、WHERE、GROUP BY、HAVING语句都是分析函数处理之前完成的。
因此,分析函数只出现在选择目录或ORDER BY(按…排序)语句中。
使用Over语句的情况 :
A. 等级函数如, ROW_NUMBER, DENSE_RANK, RANK, NTILE 使用 OVER(ORDER BY) 语句
example.
view sourceprint?01 USE AdventureWorks;
02 GO
03 SELECT c.FirstName, c.LastName
04 ,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
05 ,s.SalesYTD, a.PostalCode
06 FROM Sales.SalesPerson s
07 INNER JOIN Person.Contact c
08 ON s.SalesPersonID = c.ContactID
09 INNER JOIN Person.Address a
10 ON a.AddressID = c.ContactID
11 WHERE TerritoryID IS NOT NULL
12 AND SalesYTD <> 0;
13 GO
ROW_NUMBER() 增添顺序序号,即时存在相同的也递增序号
RANK()相同的数据序号相同,接下来为跳号(是跳跃排序,有两个第二名时接下来就是第四名)
dense_rank()相同的数据序号相同,接下来顺序递增序号(是连续排序,有两个第二名时仍然跟着第三名)
ntile(N)将记录分为N组。
B. 聚合函数如, SUM,AVG,COUNT,MIN,MAX等使用OVER(PARTITION BY)语句
Example.
01 Copy Code
02 USE AdventureWorks;
03 GO
04 SELECT SalesOrderID, ProductID, OrderQty
05 ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'
06 ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg'
07 ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count'
08 ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min'
09 ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max'
10 FROM Sales.SalesOrderDetail
11 WHERE SalesOrderID IN(43659,43664);
12 GO
OVER 函数是分析函数,其中语法: over([分区子句][排序子句])分区子句类似于sql语句中的group by;
排序子句类似于sql语句中的order by;
相关文章推荐
- ORACLE分析函数的应用例子1 over partition by
- SqlServer判断数据库、表、存储过程、函数是否存在
- sqlserver查询某个数据库有多少个表 ,存过,函数,视图
- SQLServer中的系统表,存储过程和函数的功能及应用
- Chapter 6 Group Functions Oracle 数据库组函数应用
- 11-6数据库加强(子查询(独立子查询,相关子查询),分页显示,开窗函数 over(),join )
- php的数据库应用函数
- SqlServer判断数据库、表、字段、存储过程、函数是否存在
- mysql、sqlserver、db2、oracle、hsql数据库获取数据库连接方法及分页函数
- 占位……sqlserver——实战经验小结(常用函数+数据库排序规则定义)
- [数据库]ROW_NUMBER() OVER函数的基本用法
- SqlServer之Convert 函数应用(转载)
- SQLServer中的系统表,存储过程和函数的功能及应用
- SqlServer中关于时间函数的应用
- C# 得到sqlserver 数据库存储过程,触发器,视图,函数 的定义
- wm_concat 函数在开发中的应用 (一对多查询数据库实现)
- sqlserver 2005 数据库游标的应用
- 数据库--oracle--分析函数OVER ()